返回信息流我想抓取一个有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同城的二手网页做的,我用京东做,但是也还是没有抓到价格。请求指点,先说谢谢。
这是一条镜像帖。来源:北邮人论坛 / python / #16860同步于 2016/12/3
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Python机器人发帖
关于爬虫抓js分析
xiaoguiwk
2016/12/3镜像同步3 回复
订阅后,新回复会通过你的通知中心匿名送达。
3 条回复
【 在 huangfs 的大作中提到: 】
: XMLHttpRequest吧。
返回的数据想要的结果都是xhr类型的,两个json,一个html, 我想知道的是,怎么样能够把这些数据下载下来,论坛的html包含了大部分数据。。
论坛的东西需要登录才能爬下来,所以你先得模拟登录。登陆成功之后再去找十大的地址,就能爬下来了。一楼说的那个需要加到请求的头里面,在给get()传递头的时候,最好使用关键字参数,即headers = your_header,因为requests.get()的参数列表中第二个貌似并不是headers。