前面有篇文章给出了爬取动态页面的一种思路,即应用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动态页面爬取的另一种思路的更多相关文章

  1. 【图文详解】scrapy爬虫与动态页面——爬取拉勾网职位信息(2)

    上次挖了一个坑,今天终于填上了,还记得之前我们做的拉勾爬虫吗?那时我们实现了一页的爬取,今天让我们再接再厉,实现多页爬取,顺便实现职位和公司的关键词搜索功能. 之前的内容就不再介绍了,不熟悉的请一定要 ...

  2. 爬虫系列4:Requests+Xpath 爬取动态数据

    爬虫系列4:Requests+Xpath 爬取动态数据 [抓取]:参考前文 爬虫系列1:https://www.cnblogs.com/yizhiamumu/p/9451093.html [分页]:参 ...

  3. scrapy爬虫系列之二--翻页爬取及日志的基本用法

    功能点:如何翻页爬取信息,如何发送请求,日志的简单实用 爬取网站:腾讯社会招聘网 完整代码:https://files.cnblogs.com/files/bookwed/tencent.zip 主要 ...

  4. 爬虫系列3:Requests+Xpath 爬取租房网站信息并保存本地

    数据保存本地 [抓取]:参考前文 爬虫系列1:https://www.cnblogs.com/yizhiamumu/p/9451093.html [分页]:参考前文 爬虫系列2:https://www ...

  5. 爬虫系列2:Requests+Xpath 爬取租房网站信息

    Requests+Xpath 爬取租房网站信息 [抓取]:参考前文 爬虫系列1:https://www.cnblogs.com/yizhiamumu/p/9451093.html [分页]:参考前文 ...

  6. 爬虫系列1:Requests+Xpath 爬取豆瓣电影TOP

    爬虫1:Requests+Xpath 爬取豆瓣电影TOP [抓取]:参考前文 爬虫系列1:https://www.cnblogs.com/yizhiamumu/p/9451093.html [分页]: ...

  7. Java爬虫系列四:使用selenium-java爬取js异步请求的数据

    在之前的系列文章中介绍了如何使用httpclient抓取页面html以及如何用jsoup分析html源文件内容得到我们想要的数据,但是有时候通过这两种方式不能正常抓取到我们想要的数据,比如看如下例子. ...

  8. 爬虫系列(1)-----python爬取猫眼电影top100榜

    对于Python初学者来说,爬虫技能是应该是最好入门,也是最能够有让自己有成就感的,今天在整理代码时,整理了一下之前自己学习爬虫的一些代码,今天先上一个简单的例子,手把手教你入门Python爬虫,爬取 ...

  9. 爬虫系列4:scrapy技术进阶之多页面爬取

    多页面爬取有两种形式. 1)从某一个或者多个主页中获取多个子页面的url列表,parse()函数依次爬取列表中的各个子页面. 2)从递归爬取,这个相对简单.在scrapy中只要定义好初始页面以及爬虫规 ...

随机推荐

  1. 『MXNet』专题汇总

    MXNet文档 MXNet官方教程 持久化模型 框架介绍 『MXNet』第一弹_基础架构及API 『MXNet』第二弹_Gluon构建模型 『MXNet』第三弹_Gluon模型参数 『MXNet』第四 ...

  2. spring boot(十四)shiro登录认证与权限管理

    这篇文章我们来学习如何使用Spring Boot集成Apache Shiro.安全应该是互联网公司的一道生命线,几乎任何的公司都会涉及到这方面的需求.在Java领域一般有Spring Security ...

  3. pycharm下打开、执行并调试scrapy爬虫程序

    首先得有一个Scrapy项目,我在Desktop上新建一个Scrapy的项目叫test,在Desktop目录打开命令行,键入命令:scrapy startproject test1  目录结构如下: ...

  4. poj-1026-置换

    Cipher Bob and Alice started to use a brand-new encoding scheme. Surprisingly it is not a Public Key ...

  5. LINQ 初步了解

    .NET Framework 3.5的新特性 Language Integrated Query,即语言集成查询 查询 和语言结合关系数据库里的信息使用的XML文档保存在本地的DataSet内存中的L ...

  6. PAT Rational Sum

    Rational Sum (20) 时间限制 1000 ms 内存限制 65536 KB 代码长度限制 100 KB 判断程序 Standard (来自 小小) 题目描述 Given N ration ...

  7. WDA基础十:OVS搜索帮助的使用

    对于WDA来说,常用的搜索帮助有OVS,标准SH,Interface view等.今天来说说两种常用的OVS的使用: 一:普通字段,表字段的搜索帮助(在创建节点的时候指定搜索帮助OVS,或者后面加上去 ...

  8. Oracle 11.2.0.4.0 Dataguard部署和日常维护(3)-Datauard监控篇

    1.  v$database    查看当前数据库的角色和保护模式 primary库查看 column NAME format a10 column PROTECTION_MODE format a2 ...

  9. shiro学习笔记-Subject#login(token)源码实现过程

    追踪Subject的login(AuthenticationToken token)方法,其调用的为DelegatingSubject类的login方法,DelegatingSubject实现了Sub ...

  10. Oracle.数据的增删改、表操作(创建,修改,删除)、数据类型

    SELECT ename,dname FROM emp,dept WHERE emp.deptno=dept.deptno; SELECT dname,loc FROM dept; SELECT JO ...