如何用python爬取异步加载的网页?以京东商品评论为例。
程序员文章站
2024-02-03 20:19:04
...
如何用python爬取异步加载的网页?以京东商品评论为例。
在用python爬取网页时,会遇到网页不是一次性全部加载的情况,这种网页会在某种操作后,才加载对应的部分,拿京东来说,点进商品页面,并不会直接加载评论部分内容,而是在点击“评论”标签后才会加载第一页评论的内容,点击“下一页”之后,才会加载第二页评论的内容。
对于这些异步加载的内容,直接爬取的方式是行不通的,所以要通过找到异步加载内容的url来实现内容爬取。
第一步,打开某一商品页面,打开开发者工具,进入到Network一栏。
第二步,点击网页中的商品评价,然后发现Network中会多出许多项。
第三步,依次点击Network中多出的项目,找出评论所在的位置。
第四步,右击这个部分的名称,依次选择Copy——Copy link address,得到“https://club.jd.com/comment/productPageComments.action?callback=fetchJSON_comment98&productId=12413062&score=0&sortType=5&page=0&pageSize=10&isShadowSku=0&fold=1”,这就是评论内容的url,改变“page=”后的数字,可以切换评论的不同页。打开复制的地址,出现以下页面,发现评论都在content的后边,于是就可以利用content定位来截取评论内容。
完整代码如下:
from requests_html import HTMLSession
import time
session = HTMLSession()
a = 'https://club.jd.com/comment/productPageComments.action?callback=fetchJSON_comment98&productId=12413038&score=0&sortType=5&page='
b = '&pageSize=10&isShadowSku=0&fold=1'
for i in range(10):
link = a+str(i)+b
r = session.get(link)
str_all = r.text
end = 1
for i in range(10):
start = str_all.find('content',end)
end = str_all.find(',',start)
print(str_all[start+10:end-1])
time.sleep(10)
上一篇: Python工具——tqdm:进度条