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生成随机验证码的两种方法
Dec 22 Python
Python网络爬虫实例讲解
Apr 28 Python
Python中使用装饰器来优化尾递归的示例
Jun 18 Python
全面了解python中的类,对象,方法,属性
Sep 11 Python
Python编写一个闹钟功能
Jul 11 Python
Python数据分析之如何利用pandas查询数据示例代码
Sep 01 Python
快速入门python学习笔记
Dec 06 Python
详解tensorflow训练自己的数据集实现CNN图像分类
Feb 07 Python
Python连接Redis的基本配置方法
Sep 13 Python
PyCharm 配置远程python解释器和在本地修改服务器代码
Jul 23 Python
Django框架静态文件处理、中间件、上传文件操作实例详解
Feb 29 Python
python使用Thread的setDaemon启动后台线程教程
Apr 25 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 flush()与ob_flush()的区别详解
2013/06/03 PHP
php给一组指定关键词添加span标签的方法
2015/03/31 PHP
php准确计算复活节日期的方法
2015/04/18 PHP
php 利用socket发送HTTP请求(GET,POST)
2015/08/24 PHP
yii使用activeFileField控件实现上传文件与图片的方法
2015/12/28 PHP
php中的单引号、双引号和转义字符详解
2017/02/16 PHP
PHP给源代码加密的几种方法汇总(推荐)
2018/02/06 PHP
jquery里的正则表达式说明
2011/08/03 Javascript
javascript语言结构小记(一)
2011/09/10 Javascript
input 和 textarea 输入框最大文字限制的jquery插件
2011/10/27 Javascript
常见效果实现之返回顶部(结合淡入、淡出、减速滚动)
2012/01/04 Javascript
分享8款优秀的 jQuery 加载动画和进度条插件
2012/10/24 Javascript
jquery js 获取时间差、时间格式具体代码
2013/06/05 Javascript
解析jQuery与其它js(Prototype)库兼容共存
2013/07/04 Javascript
jQuery动态添加、删除元素的方法
2014/01/09 Javascript
如何解决IONIC页面底部被遮住无法向上滚动问题
2016/09/06 Javascript
JavaScript刷新页面的几种方法总结
2019/03/28 Javascript
使用mixins实现elementUI表单全局验证的解决方法
2019/04/02 Javascript
elementUi vue el-radio 监听选中变化的实例代码
2019/06/28 Javascript
JQuery实现折叠式菜单的详细代码
2020/06/03 jQuery
[05:39]2014DOTA2西雅图国际邀请赛 淘汰赛7月14日TOPPLAY
2014/07/14 DOTA
[40:12]Liquid vs Chaos 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
Python天气预报采集器实现代码(网页爬虫)
2012/10/07 Python
python的迭代器与生成器实例详解
2014/07/16 Python
python编程开发之日期操作实例分析
2015/11/13 Python
使用Python读写及压缩和解压缩文件的示例
2016/07/08 Python
pygame游戏之旅 python和pygame安装教程
2018/11/20 Python
Python使用Pandas读写Excel实例解析
2019/11/19 Python
乐高官方旗舰店:LEGO积木玩具
2019/04/06 全球购物
Myprotein俄罗斯官网:欧洲第一运动营养品牌
2019/05/05 全球购物
简述synchronized和java.util.concurrent.locks.Lock的异同
2014/12/08 面试题
商场中秋节活动方案
2014/02/07 职场文书
工商行政管理专业求职书
2014/05/23 职场文书
个人政风行风自查自纠报告
2014/10/21 职场文书
市委召开党的群众路线教育实践活动总结大会报告
2014/10/21 职场文书
idea编译器vue缩进报错问题场景分析
2021/07/04 Vue.js