概述
- 在挖掘网站数据时,有时会遇到网页代码爬取下来,但没有所需信息、所需信息需要点击按钮出现、点击“下一页”但网页链接不变而导致不能爬取数据或者只能够爬取第一页数据的情况。
- 此时有两种较为简单的解决方法,一是使用Selenium进行模拟操作、二是对数据来源进行分析。
- 因为点击换页按钮加载数据,一定会对后台进行数据请求,故一定会有对某一个链接进行请求。
实例
- 以红色狗头网站(其他平台不一定能够使用本章所述方法)某显卡商品页面为例,点击此商品页面后其链接为
XXX(此网站主页网址)/100016672406.html
; - 点击商品评价按钮会加载评论,但链接不变;
- 拉到下面点击下一页会出现第二页评论内容,观察网址栏,其中的网址变为
XXX(此网站主页网址)/100016672406.html#comment
; - 之后再点击下一页等翻页操作,并不会改变网页链接,查看翻页按钮的a标签,也并没有具体的链接。
![多个a标签链接一致无有用信息](https://i-blog.csdnimg.cn/blog_migrate/94090bf5107d73f5df2fe1d909d045d0.png)
- 网页链接并没有变化,而评论数据进行了加载,故后台应有对隐藏链接的请求;
- 按F12打开检查面板并清空内容,点击面板上方的network项,点击评论的第二页,观察请求数据;
![观察数据](https://i-blog.csdnimg.cn/blog_migrate/e22ed2e7a85e21b0cdf38974ea528b95.png)
- 观察上图中的请求数据,数据类型仅三种:gif、script、jpeg,图片类数据并没有作用,猜测JS对评论数据进行了请求,点击查看箭头所指的script文件,按照下图红箭头所指可找到评论数据。
![寻找评论数据](https://i-blog.csdnimg.cn/blog_migrate/03810be71fd4232ad16ca58e5e346034.png)
- 点击Headers,可找到请求评论的链接
XXX(此网站主页网址)/comment/productPageComments.action?callback=fetchJSON_comment98&productId=100016672406&score=0&sortType=5&page=1&pageSize=10&isShadowSku=0&rid=0&fold=1
,其中page与pageSize参数控制评论页号与每页加载评论条数(≤10)。此时通过改变page的值即可获取各页的评论。
红色狗头网站评论爬虫实例
import requests
import json
import time
import xlwt
def get_comments():
style = xlwt.XFStyle()
style.alignment.wrap = 1
book = xlwt.Workbook(encoding='UTF-8')
headers = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36'
}
urls = ['https://club.jd.com/comment/productPageComments.action?callback=fetchJSON_comment98&productId=100012015134&score=0&sortType=5&page={}&pageSize=10&isShadowSku=0&fold=1'.format(str(n)) for n in range(0,100)]
sheet1 = book.add_sheet('sheet1', cell_overwrite_ok=True)
num = 0
for url in urls:
response = requests.get(url,headers=headers).text
content = response.replace('fetchJSON_comment98(','').replace(');','')
data = json.loads(content)
for c in range(0, 10):
sheet1.write(c+num, 0, data['comments'][c]['content'], style)
sheet1.col(0).width = 50000
print('评论{}:\n'.format(c+num+1) + data['comments'][c]['content'])
num += 10
time.sleep(1)
book.save('D:\某东P40系列手机1000条评论.xls')
get_comments()
总结
- 本章为简单的暗链寻找与挖掘思路,遇到看似异步加载问题,可先通过检查寻找是否有直接请求的链接,从而避免使用速度较慢的Selenium。
- 学如逆水行舟,不进则退!
- (ง •̀-•́)ง