前言
- 上一篇博文中, 笔者采用了selenium驱动chrome来抓取网页, 总结来看及其低效…
- 想了一下, 不能这样搞, 他要刷新局部界面肯定是要利用JavaScript调用已经写好的json的. 通常来说不会有前端选择瞎搞地址. 如果能观察出那个json的地址特点, 就到了ButifulSoup为所欲为的时间辣(●’◡’●)
- 对于json参数偏移量不规律的网页,那当然是
直接打死,哦不, 仔细观察. 对于一个正常的前端同学来说, 不规律的json只可能是有限的,我不做人啦,jojo!. 我们只要把有限的偏移量写成一个字典(dic)就大功告成
前期准备
- Chrome浏览器
- Python3.7
- requests, BeautifulSoup4模块
- 一点点耐心以及正常的视力
流程分析
- chrome浏览器打开目标网页,
- 检查元素
F12, CTRL+ shift+i, CTRL+shift+c爱用那个用哪个 - 继续加载内容,注意观察network栏下的xhr文件
- 很明显,那个since=就是我们要找的
*点击展开,根据 Query string 构造parameter参数字典
- requests 负责请求,bs4 为所欲为
代码实现
json_url = 'https://富强民主文明和谐'
#无规则偏移量,自行逆向分析得到偏移量字典
since_list = [26961.554, 26961.474, 26961.419, 26961.346]
#实现提取json,加载动态内容,但是封装性不好,不能重复利用
def getMorePages(list,count=1):
params_list = []
for i in range(count):
keyword=str(list[i])
params_list.append({
'since': keyword,
'grid_type': 'flow',
'sort': 'hot',
'tag_id': '399',
})
url = json_url
for i in params_list:
req=requests.get(url, params=i).content
soup=BeautifulSoup(req,'lxml')
getURL(soup)
尾声
很显然,这样做效率会高很多 发现json规律成为了木桶的最短板,为了避免那个网站被薅羊毛,我就手动屏蔽惹OTZ…
另外,代码也只放入了相关的一部分,有兴趣的同学可以尝试结合上一篇,整合功能鸭~
Good night!