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 urlopen 使用小示例
Sep 06 Python
python正则表达式判断字符串是否是全部小写示例
Dec 25 Python
用Python展示动态规则法用以解决重叠子问题的示例
Apr 02 Python
Python中列表和元组的相关语句和方法讲解
Aug 20 Python
浅谈python numpy中nonzero()的用法
Apr 02 Python
Python实现多属性排序的方法
Dec 05 Python
python爬虫实现中英翻译词典
Jun 25 Python
Django 导出项目依赖库到 requirements.txt过程解析
Aug 23 Python
Flask框架路由和视图用法实例分析
Nov 07 Python
np.dot()函数的用法详解
Jan 17 Python
Windows下pycharm安装第三方库失败(通用解决方案)
Sep 17 Python
教你用python控制安卓手机
May 13 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中3种生成XML文件方法的速度效率比较
2012/10/06 PHP
浅谈php函数serialize()与unserialize()的使用方法
2014/08/19 PHP
ThinkPHP5+UEditor图片上传到阿里云对象存储OSS功能示例
2019/08/05 PHP
Laravel框架下的Contracts契约详解
2020/03/17 PHP
Javascript 遍历对象中的子对象
2009/07/03 Javascript
jquery tab标签页的制作
2010/05/10 Javascript
一步一步制作jquery插件Tabs实现过程
2010/07/06 Javascript
JQERY limittext 插件0.2版(长内容限制显示)
2010/08/27 Javascript
基于JQuery 选择器使用说明介绍
2013/04/18 Javascript
jQuery动画animate方法使用介绍
2013/05/06 Javascript
javascript判断非数字的简单例子
2013/07/18 Javascript
浅谈jQuery事件绑定原理
2015/01/02 Javascript
AngularJS中取消对HTML片段转义的方法例子
2015/01/04 Javascript
JavaScript学习笔记(三):JavaScript也有入口Main函数
2015/09/12 Javascript
js实现的xml对象转json功能示例
2016/12/24 Javascript
Linux系统中利用node.js提取Word(doc/docx)及PDF文本的内容
2017/06/17 Javascript
jquery DataTable实现前后台动态分页
2017/06/17 jQuery
用React-Native+Mobx做一个迷你水果商城APP(附源码)
2017/12/25 Javascript
jquery根据name取得select选中的值实例(超简单)
2018/01/25 jQuery
js变量值传到php过程详解 将php解析成数据
2019/06/26 Javascript
js数据类型转换与流程控制操作实例分析
2019/12/18 Javascript
JS中类的静态方法,静态变量,实例方法,实例变量区别与用法实例分析
2020/03/14 Javascript
python利用datetime模块计算时间差
2015/08/04 Python
200行自定义python异步非阻塞Web框架
2017/03/15 Python
python实现黑客字幕雨效果
2018/06/21 Python
12个Python程序员面试必备问题与答案(小结)
2019/06/24 Python
使用Keras预训练好的模型进行目标类别预测详解
2020/06/27 Python
Python读取多列数据以及用matplotlib制作图表方法实例
2020/09/23 Python
canvas 基础之图像处理的使用
2020/04/10 HTML / CSS
销售文员的岗位职责
2013/11/20 职场文书
2014年两会学习心得体会
2014/03/17 职场文书
《狼和小羊》教学反思
2014/04/20 职场文书
Python-OpenCV实现图像缺陷检测的实例
2021/06/11 Python
golang 实用库gotable的具体使用
2021/07/01 Golang
海贼王十大逆天果实 魂魂果实上榜,岩浆果实攻击力最强
2022/03/18 日漫
利用For循环遍历Python字典的三种方法实例
2022/03/25 Python