cookie ajax动态网页数据的抓取
来源:互联网 发布:淘宝app首页 编辑:程序博客网 时间:2024/06/10 04:55
昨天得到一个任务,是抓以ajax技术获得的动态网页的数据。这个任务与之前任务的区别在于,之前的静态数据只需要get抓取一次;而动态网页则其静态部分在第一次请求的时候返回,但是其动态的部分则需要在第一次请求之后,获取cookie然后再用这个cookie去向服务器提交请求,之后才能够获取到网页动态部分的数据。
总结一下这个探索的过程,起初使用httplib在做这个功能,结果调试很久没有找到问题所在。然后换成urllib,urllib2这两个类库再尝试,结果每次只能够获得网页的静态页面部分,动态部分总是为空。这样试了很多种方法,方法记录在探索日志中。最后去问师兄才把问题给弄清楚,之后回来自己尝试用cookie去提交请求,最终获得了需要的数据。
这次再最基本的架构上面出了问题,就是查询的次数的问题。这样看来,如果前期对问题的连续互补边界形态和条件过程的连续互补时间过程分析不清楚的话,后期的尝试就会很局限。因而,先画处理条件的流程图和处理目标的结构图,再画处理程序的架构图和流程图。这样效率才能够提的上去。
贴上我的代码吧:
#coding=utf-8'''author: yao'''import urllib, urllib2, socket, cookielibfrom urllib2 import HTTPCookieProcessordef getCookie(): header={ 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; rv:14.0) Gecko/20100101 Firefox/14.0.1\r\n', } url1='http://flight.qunar.com/twell/cookie/allocateCookie.jsp' req1=urllib2.Request(url1, headers=header) #generagte the cookie jar to store the cookie ckjar=cookielib.MozillaCookieJar('qunar.cookie') ckproc=urllib2.HTTPCookieProcessor(ckjar) opener=urllib2.build_opener(ckproc) f=opener.open(req1) htm=f.read()# print htm f.close() #save cookie in the cookie ckjar.save(ignore_discard=True, ignore_expires=True) url2='http://flight.qunar.com/twell/flight/Search.jsp?from=fi_ont_search&searchType=OnewayFlight&fromCity=%E6%88%90%E9%83%BD&toCity=%E5%A4%A9%E6%B4%A5&fromDate=2012-08-24&toDate=2012-08-28' #construct the request reqss=urllib2.Request(url2) #process the new cookie ckproc2=urllib2.HTTPCookieProcessor(ckjar) #construct the opener opener2=urllib2.build_opener(ckproc2) #open the url using cookie page2=opener2.open(reqss) # print page2.read() print ckjar._cookies url3='http://flight.qunar.com/twell/flight/DynamicFlightInfo.jsp?&departureCity=%E6%88%90%E9%83%BD&arrivalCity=%E5%A4%A9%E6%B4%A5&departureDate=2012-08-24&fromCity=%E6%88%90%E9%83%BD&toCity=%E5%A4%A9%E6%B4%A5&from=fi_ont_search&_token=99798' req3=urllib2.Request(url3) ckproc3=urllib2.HTTPCookieProcessor(ckjar) opener3=urllib2.build_opener(ckproc3) page3=opener3.open(req3) print page3.read() print ckjar._cookies getCookie()
只是拿来的文章,留个存档,可不保证能用
- 使用已有的cookie访问网站
import cookielib, urllib2
ckjar = cookielib.MozillaCookieJar(os.path.join(’C:\Documents and Settings\tom\Application Data\Mozilla\Firefox\Profiles\h5m61j1i.default’, ‘cookies.txt’))
req = urllib2.Request(url, postdata, header)
req.add_header(’User-Agent’, \
‘Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)’)
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(ckjar) )
f = opener.open(req)
htm = f.read()
f.close()
- 访问网站获得cookie,并把获得的cookie保存在cookie文件中
import cookielib, urllib2
req = urllib2.Request(url, postdata, header)
req.add_header(’User-Agent’, \
‘Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)’)ckjar = cookielib.MozillaCookieJar(filename)
ckproc = urllib2.HTTPCookieProcessor(ckjar)opener = urllib2.build_opener(ckproc)
f = opener.open(req)
htm = f.read()
f.close()ckjar.save(ignore_discard=True, ignore_expires=True)
- 使用指定的参数生成cookie,并用这个cookie访问网站
import cookielib, urllib2
cookiejar = cookielib.CookieJar()
urlOpener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookiejar))
values = {’redirect’:”, ‘email’:'abc@abc.com’,
‘password’:'password’, ‘rememberme’:”, ’submit’:'OK, Let Me In!’}
data = urllib.urlencode(values)request = urllib2.Request(url, data)
url = urlOpener.open(request)
print url.info()
page = url.read()request = urllib2.Request(url)
url = urlOpener.open(request)
page = url.read()
print page
- cookie ajax动态网页数据的抓取
- python+selenium+PhantomJS抓取ajax动态网页数据
- 7、抓取动态网页的数据内容
- 网页抓取,模拟登陆,抓取动态网页内容等过程中,所涉及的Headers信息,Cookie信息,POST数据的处理逻辑
- python网络爬虫抓取ajax动态网页数据:以抓取KFC门店地址为例
- winfrom动态抓取网页数据
- 如何对ajax型的网页数据进行抓取
- 网页数据的抓取
- 关于动态网页的抓取
- 网页爬虫抓取js动态渲染数据
- 用 python 抓取网页中的动态数据
- 网页爬虫抓取js动态渲染数据
- WebBrowser + HtmlPraser 抓取ajax网页的源代码
- scrapy抓取ajax请求的网页
- Java爬虫——phantomjs抓取ajax动态加载网页
- Java爬虫——phantomjs抓取ajax动态加载网页
- PHP应用curl对ajax型的网页数据进行抓取
- 网页上通过ajax异步加载的数据有什么办法抓取到吗?
- [转]十个完全免费的网页原型(线框图)工具
- [Chrome源码阅读] 理解Browser进程
- firefox附加组件FlashInspector
- vim 插件
- 图像去雾论文(转)
- cookie ajax动态网页数据的抓取
- Linux下 /proc/maps 文件分析
- 汽车检测论文(转)
- AdaBoost 论文(转)
- sh有意思的记录-shell(持续更新)
- vs2008 error C2039: “shared_ptr”: 不是“std::tr1”的成员
- Snmp相关RFC文档
- [ETL] applied rows and affected rows
- 编程之美--根据遍历结果重建二叉树