爬虫系列5:scrapy动态页面爬取的另一种思路
前面有篇文章给出了爬取动态页面的一种思路,即应用Selenium+Firefox(参考《scrapy动态页面爬取》)。但是selenium需要运行本地浏览器,比较耗时,不太适合大规模网页抓取。
事实上,还有一种执行效率更高的方法。就是事先分析js发出的GET或者POST请求的网址,这样通过python向目标地址发出同样的请求,就可以得到与浏览器一致的response结果。
具体的步骤是:采用chrome浏览器中的调试工具,分析网页中用JavaScript获取数据的request语句。具体分析步骤是:打开监视工具(inspect)——网络(Network)——XHR(XMLHttpRequest),可以找到一个POST request对应的JavaScript或者ajax。接下来要做的就是直接对这个JavaScript或ajax做request操作,以获取我们想要的信息。
以下是通过发送request,获取response的代码示例:
import urllib2
import codecs
import json
#读取json中所有的pid,并且生成url list
#sessionUrl ='http://buluo.qq.com/p/detail.html?bid=254116&pid='
defgetUrlList(pContent, sessionUrl):
posts = pContent['result']['posts']
result = ["".join([sessionUrl,i['pid']]) for i in posts]
return result
url ='http://buluo.qq.com/cgi-bin/bar/post/get_post_by_page?bid=254116&num=20&start=1980&source=2'
#注意headers应当使用dict类型,以适应request.add_header(key,value)的参数要求
#Cookie:pgv_pvi=1061844992; pgv_si=s7051931648
headers ={'Host':'buluo.qq.com',
'Connection':'keep-alive',
'Accept': 'application/json',
'X-Requested-With':'XMLHttpRequest',
'User-Agent': 'Mozilla/5.0 (WindowsNT 6.1; WOW64) AppleWebKit/537.36 '+
'(KHTML, like Gecko)Chrome/50.0.2661.102 Safari/537.36',
'Referer':'http://buluo.qq.com/p/barindex.html?bid=254116',
'Accept-Language': 'zh-CN,zh;q=0.8',
}
data = None
req =urllib2.Request(url, data, headers)
response =urllib2.urlopen(req)
content =response.read().decode('utf-8')
withcodecs.open('./content.txt', 'wb', encoding = 'utf-8', errors='ignore') as f:
f.write(content)
sessionUrl ='http://buluo.qq.com/p/detail.html?bid=254116&pid='
pContent =json.loads(content);
ifpContent['result']['total'] != 0:
print getUrlList(pContent, sessionUrl)
else:
print "no contents in this page!"
爬虫系列5:scrapy动态页面爬取的另一种思路的更多相关文章
- 【图文详解】scrapy爬虫与动态页面——爬取拉勾网职位信息(2)
上次挖了一个坑,今天终于填上了,还记得之前我们做的拉勾爬虫吗?那时我们实现了一页的爬取,今天让我们再接再厉,实现多页爬取,顺便实现职位和公司的关键词搜索功能. 之前的内容就不再介绍了,不熟悉的请一定要 ...
- 爬虫系列4:Requests+Xpath 爬取动态数据
爬虫系列4:Requests+Xpath 爬取动态数据 [抓取]:参考前文 爬虫系列1:https://www.cnblogs.com/yizhiamumu/p/9451093.html [分页]:参 ...
- scrapy爬虫系列之二--翻页爬取及日志的基本用法
功能点:如何翻页爬取信息,如何发送请求,日志的简单实用 爬取网站:腾讯社会招聘网 完整代码:https://files.cnblogs.com/files/bookwed/tencent.zip 主要 ...
- 爬虫系列3:Requests+Xpath 爬取租房网站信息并保存本地
数据保存本地 [抓取]:参考前文 爬虫系列1:https://www.cnblogs.com/yizhiamumu/p/9451093.html [分页]:参考前文 爬虫系列2:https://www ...
- 爬虫系列2:Requests+Xpath 爬取租房网站信息
Requests+Xpath 爬取租房网站信息 [抓取]:参考前文 爬虫系列1:https://www.cnblogs.com/yizhiamumu/p/9451093.html [分页]:参考前文 ...
- 爬虫系列1:Requests+Xpath 爬取豆瓣电影TOP
爬虫1:Requests+Xpath 爬取豆瓣电影TOP [抓取]:参考前文 爬虫系列1:https://www.cnblogs.com/yizhiamumu/p/9451093.html [分页]: ...
- Java爬虫系列四:使用selenium-java爬取js异步请求的数据
在之前的系列文章中介绍了如何使用httpclient抓取页面html以及如何用jsoup分析html源文件内容得到我们想要的数据,但是有时候通过这两种方式不能正常抓取到我们想要的数据,比如看如下例子. ...
- 爬虫系列(1)-----python爬取猫眼电影top100榜
对于Python初学者来说,爬虫技能是应该是最好入门,也是最能够有让自己有成就感的,今天在整理代码时,整理了一下之前自己学习爬虫的一些代码,今天先上一个简单的例子,手把手教你入门Python爬虫,爬取 ...
- 爬虫系列4:scrapy技术进阶之多页面爬取
多页面爬取有两种形式. 1)从某一个或者多个主页中获取多个子页面的url列表,parse()函数依次爬取列表中的各个子页面. 2)从递归爬取,这个相对简单.在scrapy中只要定义好初始页面以及爬虫规 ...
随机推荐
- 牛客小白赛1 F题三视图
链接:https://www.nowcoder.com/acm/contest/85/F来源:牛客网 题目描述 Etéreo 拿出家里的许多的立方体积木,堆成了一个三维空间中的模型.既然你高考选了技术 ...
- project euler113
project euler 113 对于1个数字,如果他数位不减或者不增称为bouncy number,比如1233,33210.统计1-10^100中的bouncy number 思路:分为两种 ...
- 【微信公众号开发】【10】JSJDK相关
前言: 1,优点:官方提供的,会调用后还算使用方便,不用费劲了解各个原生组件 缺点:使用上有限制(如:上传文件有大小限制),很容易踩坑,部分安卓手机及电脑端不支持pjax 总结:上手容易,坑很多 2, ...
- flexbox与grid layout的区别
flexbox是一种针对一维的局部布局,以轴为核心的弹性布局. grid layout是二维的更加全面的网格布局,
- position属性的总结
static 默认.位置设置为 static 的元素,它始终会处于页面流给予的位置(static 元素会忽略任何 top.bottom.left 或 right 声明). relative 位置被设置 ...
- python-day76--django-中间件
什么是中间件?中间件应用场景?和装饰器区别? 中间件 对于所有批量的请求用中间件合适,而对于某些请求个数少用装饰器合适 - 中间件是什么? - 是一个类 - 方法名必须是process_request ...
- 十二、持久层框架(MyBatis)
一.PageHelper分页插件的使用 PageHelper是一款MyBatis的分页插件,只需要简单的配置,然后直接调用方法就可以. 1.配置PageHelper插件 在mybatis-config ...
- Nginx基本
静态HTTP服务器 首先,Nginx是一个HTTP服务器,可以将服务器上的静态文件(如HTML.图片)通过HTTP协议展现给客户端.配置: server { listen ; # 端口号 locati ...
- view的clickable属性和点击background颜色改变
drawable可以是color(color只能是color) android:background=drawable或者color 当一个view(iamge/text view都可以)的andro ...
- Win10系列:JavaScript页面导航
页面导航是在开发应用的过程中使用频率较高的技术,其中比较常用的导航方式有多页导航和页内导航,采用多页导航方式的应用程序包含一系列的页面,在一个页面中加入另一个页面的链接地址后,单击链接将跳转到指定页面 ...