昨天写了一个小爬虫,来爬取58上面商品的浏览量,在58上,商品信息分个人和商家,在爬取个人的商品浏览量时,做一些标签位置的分析,就可以定位到浏览量,但是在运行中出现了错误,原来里面含有商家商品,商家商品浏览量和个人不太一样,浏览量的抓取做了反爬虫,上面的做法,无法爬取,后来我做了一些简单的分析。
打开chrome的检查,
Counter58.userlist[0]={uid:’0’,uname:”,face:”,vt:”};Counter58.total=2737
点开可以看到2737次浏览
def get_views_from(url):
# url后面带有问号和参数,取问号前的url
url_path = url.split("?")[0]
# 取最后一节url信息,其带有id信息
url_last_part = url_path.split('/')[-1]
# 去掉后面的x.shtml,得到id
info_id = url_last_part.strip('x.shtml')
api = 'http://jst1.58.com/counter?infoid={}'.format(info_id)
# 这个是找到了58的查询接口,不了解接口可以参照一下新浪微博接口的介绍
# 浏览量的抓取做了反爬虫,因此加上header信息,不然返回为空
headers = {
'User-Agent':r'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.87 Safari/537.36',
'Cookie':r'id58=c5/ns1ct99sKkWWeFSQCAg==; city=bj; 58home=bj; ipcity=yiwu%7C%u4E49%u4E4C%7C0; als=0; myfeet_tooltip=end; bj58_id58s="NTZBZ1Mrd3JmSDdENzQ4NA=="; sessionid=021b1d13-b32e-407d-a76f-924ec040579e; bangbigtip2=1; 58tj_uuid=0ed4f4ba-f709-4c42-8972-77708fcfc553; new_session=0; new_uv=1; utm_source=; spm=; init_refer=; final_history={}; bj58_new_session=0; bj58_init_refer=""; bj58_new_uv=1'.format(str(infoid)),
'Accept': '*/*',
'Accept-Encoding': 'gzip, deflate, sdch',
'Accept-Language': 'zh-CN,zh;q=0.8',
'Cache-Control': 'max-age=0',
'Connection': 'keep-alive',
'Host':'jst1.58.com',
'Referer':r'http://zhangzhou.58.com/pingbandiannao/27948824287934x.shtml'.format(info_id)
}
r = requests.get(api, headers=headers)
# 判断状态码,检查是否被网站封ip
if r.status_code == 200:
return r.text.split('=')[-1]
return 0