使用 Python 如何爬取这样的数据 BeautifulSoup?request?

发布于 2022-09-05 04:35:32 字数 215 浏览 19 评论 0

用于测试的链接是这样的

http://www.zhcw.com/ssq/kjgg/10006509.shtml

图片描述

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

豆芽 2022-09-12 04:35:32

通过查找,发现这些数据是加载完页面再由JS动态写入的:
clipboard.png

接着来找zj,上面两行有:
clipboard.png

zj = obj[0];
obj = con;
// 所以
zj = con[0];
// 又因为
con = eval((con.substring(con.indexOf("["), con.indexOf("]") + 1)));

其中,con为$.trim($('#currentScript').html().replace('<div>', '').replace('</div>', ''))
也就是,将$('#currentScript').html()的内容,去掉div标签后,过滤首尾空白字符后,取[]中的数据,当做JSON解析。

这部分操作可以通过Python完成,所以,先用Python的BeautifulSoup找到#currentScript,再手动替换,然后当做JSON解析即可

code = '....' # HTML代码
soup = BeautifulSoup(code, ...) # 创建soup对象
json = soup.find(id = 'currentScript'); # 此处,等价于获取con初始值

# 替换div
json = json.replace('<div>', '')
json = json.replace('</div>', '')

# $.trim等价
json = json.strip()

# 找到[和]中间的数据,拆成JSON
# cut_start和cut_end只是用于标记起始位置,类似上面的con.indexOf("[")和con.indexOf("]")
# 为了方便理解,单独写了
cut_start = json.find('[')
cut_end = json.find(']')

json = json[cut_start:cut_end + 1]

这样,就可以得到一个JSON字符串了,然后放到python的JSON解析器解析成JSON对象,这个你自己写吧。

你好,陌生人 2022-09-12 04:35:32
from pyquery import PyQuery as Q
import requests
import json

r = requests.get('http://www.zhcw.com/ssq/kjgg/10006509.shtml')
str = Q(r.content)('#currentScript').html()
info = json.loads(str)[0]
print info
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文