文章目录
Python爬虫(九)——京东比价定向爬虫
- 目标:获取京东搜索页面的信息,提取其中的商品名称和价格。
- 要求:京东的搜索接口 翻页的处理
- 技术路线:requests-re
判断可行性
查看链接
第一页:
https://search.jd.com/Search?keyword=相机&enc=utf-8&page=1
第二页:
https://search.jd.com/Search?keyword=相机&enc=utf-8&page=3
第三页:
https://search.jd.com/Search?keyword=相机&enc=utf-8&page=5
由上我们可以猜测最后的s变量和页码有关。
查看robots协议
打开京东的robots.txt。发现:
结果我们发现它不允许我们爬取。不过我们如果行为就像人类的行为,没有过度消耗服务器的资源仅仅是用于学习和探索那是没有问题的。
程序的设计
步骤
- 提交上屏搜索请求,循环获取页面
- 对于每个页面,提取商品名称和价格信息
- 将信息输出到屏幕上
方法
def getHTMLText(url)
def getHTMLText(url):
try: # 利用前面的代码框架返回页面的text
r=requests.get(url,timeout=30)
r.raise_for_status()
r.encoding=r.apparent_encoding
return r.text
except:
return ''
这时我们发现无法得到结果,查看后发现界面跳转到了登录界面,于是我们加入cookies参数来解决这个问题。
那么如何得到cookie呢?我们打开这个网页,按下f12打开开发者模式:
然后选中network刷新一下界面,在最上面找到Search?keyword=这个包:
然后我们在右边的Request Hearders中就能找到自己的cookie:
代码:
def getHTMLText(url):
try: # 利用前面的代码框架返回页面的text
r = requests.get(url, timeout=30, headers={
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36'}, cookies={
'cookie': '你的cookie'})
r.raise_for_status()
r.encoding = r.apparent_encoding
return r.</