BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / python / #16860同步于 2016/12/3
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Python机器人发帖

关于爬虫抓js分析

xiaoguiwk
2016/12/3镜像同步3 回复
我想抓取一个有js动态生成的页面,但是网上找了很多资料感觉没有一个详细的教程, 我的分析步骤是这样的,以论坛为例 打开开发者工具,查看浏览器在加载过程中的请求,论坛加载的过程中,是向https://bbs.byr.cn/default?_uid=xiaoguiwk这个地址发送了请求,打开其实也就是论坛的首页。到此可以知道模拟登陆完成后页面加载的地址了。在加载完首页之后,例如我想抓取页面右下角的发文排行榜,先把网页源码拷贝到sublime中,搜索排行第一的ID,alicegreen,搜索无果,至此可以判断这个模块是动态加载的。 然后我再次打开开发者工具,刷新页面,右击alicegreen检查,虽然找到了相应的标签位置,但没有什么用,再点击network,发现在整个页面加载的过程中,除了一些图片之外,还加载了一些js文件,css文件,json文件,我先点击ajax_session.json,发现里面是我的个人信息,再打开ajax_list.json?uid=xiaoguiwk&root=list-section,发现里面是几个板块,没有得到更多的信息。 然后我点开default?_uid=xiaoguiwk,发现preview中就是网站的主要框架,再点开response,发现网页的所有信息都在里面,然后我点开headers,发现了request url,是https://bbs.byr.cn/default?_uid=xiaoguiwk&_uid=xiaoguiwk这个样子。然后我重新将代码中的url改成这个地址,再次请求,发现仍然返回None。以下是我的代码: #coding:utf-8 import requests from bs4 import BeautifulSoup url = 'https://bbs.byr.cn/default?_uid=xiaoguiwk&_uid=xiaoguiwk' headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36'} r = requests.get(url,headers) soup = BeautifulSoup(r.content,'html.parser') l = soup.find(class_='widget-content') print(l) 最后我打开几个.js文件,发现里面都是一些代码,点开headers,发现了他的请求地址,方式等,我拷贝了这个地址,打开发现看不懂,这个代码我猜想是加载页面请求的js地址,在网页源码中搜索,发现这个地址存在于源码之中,至此我便不知道该做些什么了。。虽然可以通过源码来获取这个js请求的地址,但是确实js的代码,因为没有学过也看不太懂,然后我想问的是我该怎么处理或者是我的分析过程有什么误区? 上面是分析论坛的,由于京东商品的价格也是动态加载的,我也尝试分析加载过程,我看着一个视频做的,他是用58同城的二手网页做的,我用京东做,但是也还是没有抓到价格。请求指点,先说谢谢。
订阅后,新回复会通过你的通知中心匿名送达。
3 条回复
huangfs机器人#1 · 2016/12/3
XMLHttpRequest吧。
xiaoguiwk机器人#2 · 2016/12/3
【 在 huangfs 的大作中提到: 】 : XMLHttpRequest吧。 返回的数据想要的结果都是xhr类型的,两个json,一个html, 我想知道的是,怎么样能够把这些数据下载下来,论坛的html包含了大部分数据。。
zzt1993520机器人#3 · 2016/12/6
论坛的东西需要登录才能爬下来,所以你先得模拟登录。登陆成功之后再去找十大的地址,就能爬下来了。一楼说的那个需要加到请求的头里面,在给get()传递头的时候,最好使用关键字参数,即headers = your_header,因为requests.get()的参数列表中第二个貌似并不是headers。