python爬虫爬取淘宝商品比价(附淘宝反爬虫机制解决小办法)


Posted in Python onDecember 03, 2020

因为评论有很多人说爬取不到,我强调几点

kv的格式应该是这样的:

kv = {‘cookie':‘你复制的一长串cookie',‘user-agent':‘Mozilla/5.0'}

注意都应该用 ‘' ,然后还有个英文的 逗号,

kv写完要在后面的代码中添加

r = requests.get(url, headers=kv,timeout=30)

自己得先登录自己的淘宝账号才有自己登陆的cookie呀,没登录cookie当然没用

以下原博

本人是python新手,目前在看中国大学MOOC的嵩天老师的爬虫课程,其中一个实例是讲如何爬取淘宝商品信息

以下是代码:

import requests
import re
 
def getHTMLText(url):
 try:
  r = requests.get(url, timeout=30)
  r.raise_for_status()
  r.encoding = r.apparent_encoding
  return r.text
 except:
  return ""
  
def parsePage(ilt, html):
 try:
  plt = re.findall(r'\"view_price\"\:\"[\d\.]*\"',html)
  tlt = re.findall(r'\"raw_title\"\:\".*?\"',html)
  for i in range(len(plt)):
   price = eval(plt[i].split(':')[1])
   title = eval(tlt[i].split(':')[1])
   ilt.append([price , title])
 except:
  print("")
 
def printGoodsList(ilt):
 tplt = "{:4}\t{:8}\t{:16}"
 print(tplt.format("序号", "价格", "商品名称"))
 count = 0
 for g in ilt:
  count = count + 1
  print(tplt.format(count, g[0], g[1]))
   
def main():
 goods = '书包'
 depth = 3
 start_url = 'https://s.taobao.com/search?q=' + goods
 infoList = []
 for i in range(depth):
  try:
   url = start_url + '&s=' + str(44*i)
   html = getHTMLText(url)
   parsePage(infoList, html)
  except:
   continue
 printGoodsList(infoList)
  
main()

但是我们运行的时候会发现这个程序没有出错,但是爬取不到,原因是淘宝实施了反爬虫机制,r.text 时是登录界面,我们如何绕过登录界面进行爬取呢?

首先我们需要先在浏览器中登录我们的个人淘宝,然后搜索以书包为例的商品,打开开发者模式(我使用的是chrome)或者按F12

python爬虫爬取淘宝商品比价(附淘宝反爬虫机制解决小办法)

这里我们可以看到我们当前的cookie和user-agent(一般是Mozilla/5.0)(注意:如果没有出现这几个name,点击浏览器刷新就会出现了)

然后在代码中增加我们的cookie和user-agent

python爬虫爬取淘宝商品比价(附淘宝反爬虫机制解决小办法)

然后运行

python爬虫爬取淘宝商品比价(附淘宝反爬虫机制解决小办法)

我只是个初学者,学的时候视频给不了答案,百度了很多,才发现这个小技巧,
有问题百度就完事了

完整代码

import requests
import re


def getHTMLText(url):
 kv = {'cookie':'t=5c749e8d453e7e3664735746f5eb5de8; cna=BrXNFDenbXUCAXggNKX9H1bo; thw=cn; tg=0; enc=5LMRHD8305w3oo8X0agYVFUDa7Ox%2F4RBf34oCWap48nRHy%2B%2B1RZCWZJ7ebn%2Fpy7vRNIL8xpS%2Ba0oNFXG5nSu8w%3D%3D; hng=CN%7Czh-CN%7CCNY%7C156; cookie2=10dbf1309bd9a2d5bc9cabe562965aee; _tb_token_=ee67e1a3ee0e5; alitrackid=www.taobao.com; swfstore=308730; v=0; unb=2448224718; sg=%E6%BB%A18d; _l_g_=Ug%3D%3D; skt=d53506c42f2db259; cookie1=BxUHGXuG%2B5Y4Iw7vZCvjLJ0zDvFL2Xy3mjxT%2FRPtFeA%3D; csg=4246b77f; uc3=vt3=F8dByEzfiHo1%2FUIk8VY%3D&id2=UUwU0bQkq1tYDQ%3D%3D&nk2=CN5OZuI3Xv2%2BlbVX&lg2=W5iHLLyFOGW7aA%3D%3D; existShop=MTU1MDU2MTUyMQ%3D%3D; tracknick=king%5Cu4E36%5Cu5C0F%5Cu4E30%5Cu6EE1; lgc=king%5Cu4E36%5Cu5C0F%5Cu4E30%5Cu6EE1; _cc_=VFC%2FuZ9ajQ%3D%3D; dnk=king%5Cu4E36%5Cu5C0F%5Cu4E30%5Cu6EE1; _nk_=king%5Cu4E36%5Cu5C0F%5Cu4E30%5Cu6EE1; cookie17=UUwU0bQkq1tYDQ%3D%3D; lastalitrackid=login.taobao.com; mt=ci=5_1; x=e%3D1%26p%3D*%26s%3D0%26c%3D0%26f%3D0%26g%3D0%26t%3D0%26__ll%3D-1%26_ato%3D0; uc1=cookie14=UoTZ5OXqJxXKdA%3D%3D&lng=zh_CN&cookie16=W5iHLLyFPlMGbLDwA%2BdvAGZqLg%3D%3D&existShop=false&cookie21=UIHiLt3xThH8t7YQouiW&tag=8&cookie15=UIHiLt3xD8xYTw%3D%3D&pas=0; JSESSIONID=F99B5E66516B99D5E7C9F431E402713F; l=bBNU0zKPvJ9oGfuLBOCNZuI8LN_OGIRYjuPRwCfMi_5B46JhzLQOllv3_FJ6Vj5RsK8B4z6vzNp9-etki; isg=BDg4VI5GkPAaMvx83RJGSPCNCeYKCZ0m9uCVOHKp6XNmjdh3GrU6uo2vQcWY5lQD; whl=-1%260%260%261550562673185',
   'user-agent':'Mozilla/5.0'}
 try:
  r = requests.get(url, headers=kv,timeout=30)
  r.raise_for_status()
  r.encoding = r.apparent_encoding
  return r.text
 except:
  return ""


def parsePage(ilt, html):
 try:
  plt = re.findall(r'\"view_price\"\:\"[\d\.]*\"', html)
  tlt = re.findall(r'\"raw_title\"\:\".*?\"', html)
  for i in range(len(plt)):
   price = eval(plt[i].split(':')[1])
   title = eval(tlt[i].split(':')[1])
   ilt.append([price, title])
 except:
  print("")


def printGoodsList(ilt):
 tplt = "{:4}\t{:8}\t{:16}"
 print(tplt.format("序号", "价格", "商品名称"))
 count = 0
 for g in ilt:
  count = count + 1
  print(tplt.format(count, g[0], g[1]))


def main():
 goods = '书包'
 depth = 3
 start_url = 'https://s.taobao.com/search?q=' + goods
 infoList = []
 for i in range(depth):
  try:
   url = start_url + '&s=' + str(44 * i)
   html = getHTMLText(url)
   parsePage(infoList, html)
  except:
   continue
 printGoodsList(infoList)


main()

到此这篇关于python爬虫爬取淘宝商品比价(附淘宝反爬虫机制解决小办法)的文章就介绍到这了,更多相关python爬取淘宝商品内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python基于twisted实现简单的web服务器
Sep 29 Python
利用Fn.py库在Python中进行函数式编程
Apr 22 Python
Python打印输出数组中全部元素
Mar 13 Python
基于PyQt4和PySide实现输入对话框效果
Feb 27 Python
微信公众号token验证失败解决方案
Jul 22 Python
python 中xpath爬虫实例详解
Aug 26 Python
Python 解析pymysql模块操作数据库的方法
Feb 18 Python
python pymysql链接数据库查询结果转为Dataframe实例
Jun 05 Python
python中的错误如何查看
Jul 08 Python
python3访问字典里的值实例方法
Nov 18 Python
Python将QQ聊天记录生成词云的示例代码
Feb 10 Python
Python 快速验证代理IP是否有效的方法实现
Jul 15 Python
python 调整图片亮度的示例
Dec 03 #Python
Python 实现PS滤镜的旋涡特效
Dec 03 #Python
Python 实现PS滤镜中的径向模糊特效
Dec 03 #Python
python字符串拼接+和join的区别详解
Dec 03 #Python
python二维图制作的实例代码
Dec 03 #Python
python 使用paramiko模块进行封装,远程操作linux主机的示例代码
Dec 03 #Python
Python 按比例获取样本数据或执行任务的实现代码
Dec 03 #Python
You might like
php中文验证码实现方法
2015/06/18 PHP
JavaScript 上万关键字瞬间匹配实现代码
2013/07/07 Javascript
JS常用函数使用指南
2014/11/23 Javascript
js实现数字每三位加逗号的方法
2015/02/05 Javascript
使用AngularJS 应用访问 Android 手机的图片库
2015/03/24 Javascript
JQuery控制radio选中和不选中方法总结
2015/04/15 Javascript
js限制文本框只能输入整数或者带小数点的数字
2015/04/27 Javascript
AngularJS表单提交实例详解
2017/02/18 Javascript
原生js编写2048小游戏
2017/03/17 Javascript
Bootstrap里的文件分别代表什么意思及其引用方法
2017/05/01 Javascript
select2 ajax 设置默认值,初始值的方法
2018/08/09 Javascript
在vue中使用express-mock搭建mock服务的方法
2018/11/07 Javascript
详解使用React制作一个模态框
2019/03/14 Javascript
解决vue使用vant下拉框van-dropdown-item 绑定title值不变问题
2020/08/05 Javascript
[59:15]EG vs LGD 2018国际邀请赛淘汰赛BO3 第一场 8.26
2018/08/29 DOTA
python list使用示例 list中找连续的数字
2014/01/27 Python
在Python的Tornado框架中实现简单的在线代理的教程
2015/05/02 Python
Python3简单实例计算同花的概率代码
2017/12/06 Python
Python函数参数操作详解
2018/08/03 Python
对Python Pexpect 模块的使用说明详解
2019/02/14 Python
Python实现监控Nginx配置文件的不同并发送邮件报警功能示例
2019/02/26 Python
Python高级特性 切片 迭代解析
2019/08/23 Python
基于Python3.7.1无法导入Numpy的解决方式
2020/03/09 Python
opencv 查找连通区域 最大面积实例
2020/06/04 Python
python 服务器运行代码报错ModuleNotFoundError的解决办法
2020/09/16 Python
Python3中小括号()、中括号[]、花括号{}的区别详解
2020/11/15 Python
学年末自我鉴定
2014/01/21 职场文书
优秀幼教自荐信
2014/02/03 职场文书
校园绿化美化方案
2014/06/08 职场文书
工人先锋号申报材料
2014/12/29 职场文书
公证处委托书
2015/01/28 职场文书
2015年清明节网上祭英烈留言寄语
2015/03/04 职场文书
建国大业观后感
2015/06/01 职场文书
单位收入证明范本
2015/06/18 职场文书
暑假打工感想
2015/08/07 职场文书
python正则表达式re.search()的基本使用教程
2021/05/21 Python