jquery抓取网页内容(2.解决工具解决问题用到的python库如下:3.解决方法)
优采云 发布时间: 2021-11-26 22:27jquery抓取网页内容(2.解决工具解决问题用到的python库如下:3.解决方法)
一波自我回应:摸索了三天,终于找到了一些眉毛。我把每个家庭的情况和方法这几天终于试了试。一方面,它作为这个问题的总结,另一方面。如果以后有像我这样的Python新手,可以考虑帮助。
1. 问题总结
在寻找答案的过程中,发现爬虫中关于翻页的问题还是比较多的。由于网站数据的标准化程度不同,遇到的问题也略有不同。主要有两大类。我遇到的是第三类:
首先,网页是静态加载的。现象是每次翻页都会提供一个新的url地址,地址中的NoPage发生了变化(NoPage只是一个例子,网站的具体翻页参数需要根据object网站进行分析),网上提到的这种类型网站多使用request.get方法,使用url拼接翻页。
二是网页是动态加载的。现象是每次翻页url地址都不会改变。作为一个新手,我完全一头雾水,不知道背后发生了什么。这几类网站大多使用jQuery+Ajaxr的动态加载方式。可以使用 request.post 发送 post 请求来翻页。翻页请求的数据往往反映在formdata中。由于我没有相关的理论基础,也不知道实现背后的原理,我只在实现过程中介绍一下我的发现。
还有我遇到的第三种恶心的网站。首先,URL地址不会每次翻页都改变。通过开发工具查了一下,发现确实使用了request.post和ajax的动态加载方式。它应该适用于上述第二种情况。可以通过request.post发送formdata来实现,但是手动翻了几页后,发现formdata里面的参数全部没变,改变的参数都在Query String Parameter里面。第一种情况应再次适用。所以我还没有找到一个完全适应的答案。
2. 解决方案工具
用于解决问题的python库如下:
3.解决方案
作为新手,Scrapy 框架是一种简单的爬取方法。结合Xpath的路径表达式,网站抓取网页数据规范应该没有问题。这里不讨论异步问题,因为我还没有学过。我也成功实现了抓取单页信息,进入特定内容页面抓取信息的功能。
但是,我面临的网站,正如问题描述中所解释的,对新手不是很友好。全网搜索后,没有即插即用。解决办法是稍微吃一点。还是绕不开网页源码的分析,耐心使用Chrome+F12,点击下一页观察变化
我要抓取的网站是60条作为一个静态组,每页显示20条信息,也就是翻页3次会生成这样一个XHR类型的dataproxy.jsp文件(原理我不t know) , 该文件收录以下信息供后续会议使用
然后我点了一个预览这个XHR文件,发现里面有数据:title,href,发布日期,这些就是我要获取的数据
构造请求的结构
请求头
# 构造请求header
header = {
'Accept': 'text/javascript, application/javascript, */*',
'Accept- Encoding': 'gzip, deflate',
'Accept-Language': 'zh-CN,zh;q=0.9',
'Connection': 'keep-alive',
'Content-length': '233',
'Content-Type': 'application/x-www-form-urlencoded',
'Cookie': 'JSESSIONID=E59F8413AE771F7B79A9A0E12EEC7B80; acw_tc=7b39758715821845337757109ea8a2879399902f7a4d85847fb64e2484d02b',
'Host': 'www.gzbgj.com',
'Origin': 'http://www.gzbgj.com',
'Referer': 'http://www.gzbgj.com/col/col7615/index.html',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36',
'X-Requested-With': 'XMLHttpRequest'
}
请求表单数据:这里使用源码(点击Form Data下的查看源码),因为不知道为什么解析出来的json表单数据不好用
data = "appid=1&webid=27&path=%2F&columnid=7615&sourceContentType=1&unitid=56554&webname=%E4%B8%AD%E5%9B%BD%E8%91%9B%E6%B4%B2%E5%9D%9D%E9%9B%86%E5%9B%A2%E5%9B%BD%E
请求url:这里是url拼接的方法。这里的数据是Query String Parameter下的三个参数。注意原来的方法叫start_requests,不过这好像和Scrapy库中已有的函数有冲突。刚改了名字
发送请求
用三个参数就可以实现抓取信息的功能:本来想用Scrapy自带的Formrequest方法,但是不知道为什么没有成功获取到数据。
response = scrapy.Formrequest(url, formdata)
我不得不使用 requests.post 的请求
response = requets.post(url, headers=header, data=data)
然后通过在Query String Parameter中叠加控制起止页的参数就可以实现“翻页”。
4.总结
虽然感觉有点撞击和碰撞,但最终还是成真了。我想一定有更好更高效的解决方案,但我的能力有限。我现在不继续深入挖掘了。我准备继续改进,看看有没有缘分的人能看到这个答案。我希望它对你有用。求大神帮忙,希望大神能指点一下!