Python实现的淘宝直通车数据抓取(2)

再看我们要抓取的数据,网页是这样的:
[img]http://dl2.iteye.com/upload/attachment/0115/9915/70ce46e1-2f25-3907-bf74-a1511fb0d8a4.png[/img]


这里是我们要抓取的数据:
[img]http://dl2.iteye.com/upload/attachment/0115/9917/2540269f-8acd-375c-b234-e127eaafab12.png[/img]


打开chrome的调试工具发现数据是通过一个Ajax请求来获取的:
[img]http://dl2.iteye.com/upload/attachment/0115/9919/e33c622b-4557-3ce0-a7bc-e6d3a345a551.png[/img]


这样的话,获取数据就太简单了,因为完全不需要去解析html页面,只需要将返回的json串解析即可得到数据

class subwayquery:
url='http://subway.simba.taobao.com/report/getNetworkPerspective.htm'
def __init__(self,token,cookiestr):
self.data= {
'sla':'json',
'isAjaxRequest':'true',
'token':token,
'_referer':'/tools/insight/queryresult?tab=tabs-region&start=&end=&kws=',
}
self.token=token
self.postdata=urllib.parse.urlencode(self.data).encode('utf-8')
self.startDate=(datetime.datetime.now()-datetime.timedelta(days=8)).strftime('%Y-%m-%d')
self.endDate=(datetime.datetime.now()-datetime.timedelta(days=1)).strftime('%Y-%m-%d')
self.headers= {
'Host':'subway.simba.taobao.com',
'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:43.0) Gecko/20100101 Firefox/43.0',
'Accept':'application/json, text/javascript, */*; q=0.01',
'Accept-Language':'zh-CN,zh;q=0.8',
'Connection' : 'Keep-Alive',
'Cookie' : cookiestr,
'Origin':'http://subway.simba.taobao.com',
'Cache-Control':'max-age=0',
'X-Requested-With':'XMLHttpRequest'
}
self.http=urllib3.PoolManager(headers=self.headers,timeout=15,retries=15)
def query(self,keyword,perspectiveType):
tourl=self.url+'?bidwordstr='+urllib.parse.quote(keyword)+'&startDate='+self.startDate+'&endDate='+self.endDate+'&perspectiveType='+perspectiveType
data= {
'sla':'json',
'isAjaxRequest':'true',
'token':self.token,
'_referer':'/tools/insight/queryresult?kws='+urllib.parse.quote(keyword)+'&tab=tabs-region&start=&end=',
}
try:
#10次重试保证返回值
i=0;
while(True):
response=self.http.request_encode_body('POST',tourl,fields=data)
parse=json.loads(response.data.decode())
if(parse['code']=='200'):
if(parse['result']):
return parse
else:
i+=1
if(i==10):
# print(keyword)
return False
else:
return False
return False
except Exception as e:
print(e)
return False

这里使用了urllib3的http连接池,可以方便地设置超时重连和重试次数。不知道为什么,经常会得到空的数据,返回json串的result中没有内容,所以这里设置了10次重试,基本可以保证不会得到空的值。
[url=http://raphael10241024.iteye.com/blog/2285333]Python实现的淘宝直通车数据抓取(1)[/url]
[url=http://raphael10241024.iteye.com/blog/2285364]Python实现的淘宝直通车数据抓取(2)[/url]
[url=http://raphael10241024.iteye.com/blog/2286091]Python实现的淘宝直通车数据抓取(3)[/url]
[url=http://raphael10241024.iteye.com/blog/2286092]Python实现的淘宝直通车数据抓取(4)[/url]

你可能感兴趣的:(python,json,ajax,爬虫)