cookie ajax动态网页数据的抓取

昨天得到一个任务,是抓以ajax技术获得的动态网页的数据。这个任务与之前任务的区别在于,之前的静态数据只需要get抓取一次;而动态网页则其静态部分在第一次请求的时候返回,但是其动态的部分则需要在第一次请求之后,获取cookie然后再用这个cookie去向服务器提交请求,之后才能够获取到网页动态部分的数据。

总结一下这个探索的过程,起初使用httplib在做这个功能,结果调试很久没有找到问题所在。然后换成urllib,urllib2这两个类库再尝试,结果每次只能够获得网页的静态页面部分,动态部分总是为空。这样试了很多种方法,方法记录在探索日志中。最后去问师兄才把问题给弄清楚,之后回来自己尝试用cookie去提交请求,最终获得了需要的数据。

这次再最基本的架构上面出了问题,就是查询的次数的问题。这样看来,如果前期对问题的连续互补边界形态和条件过程的连续互补时间过程分析不清楚的话,后期的尝试就会很局限。因而,先画处理条件的流程图和处理目标的结构图,再画处理程序的架构图和流程图。这样效率才能够提的上去。

贴上我的代码吧:


#coding=utf-8

'''
author: yao
'''

import urllib, urllib2, socket, cookielib
from urllib2 import HTTPCookieProcessor

def 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


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值