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

作者:我想吃红烧猪蹄 时间:2021-11-14 06:16:40 

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

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()

来源:https://blog.csdn.net/weixin_43173093/article/details/87716555

标签:python,爬取,淘宝商品
0
投稿

猜你喜欢

  • ASP利用TCPIP.DNS组件获得域名对应的IP

    2009-11-07 19:21:00
  • python中的多线程锁lock=threading.Lock()使用方式

    2022-02-12 19:48:39
  • 用ASP和SQL语句动态的创建Access表

    2008-10-14 16:59:00
  • python调用私有属性的方法总结

    2023-09-06 03:16:18
  • 详细介绍查询优化技术在现实系统中的运用

    2009-01-04 13:34:00
  • CSS 的模块化思想

    2009-02-03 12:52:00
  • PHP开发之归档格式phar文件概念与用法详解【创建,使用,解包还原提取】

    2023-09-08 11:36:58
  • asp如何直接调用Excel数据?

    2010-06-28 18:26:00
  • SQL Server双服务器架设并数据自动同步教程

    2023-07-03 02:59:53
  • WEB打印分页类(JS)

    2008-01-22 14:02:00
  • 免费手机号码归属地API查询接口和PHP使用实例分享

    2023-10-31 08:06:37
  • mysql rand(x)生产重复随机序列

    2010-12-03 16:01:00
  • 高性能表现的网站(译)

    2008-08-31 20:26:00
  • Hibernate 的原理与配置

    2023-07-20 21:26:52
  • 隐藏并修改文件的最后修改时间的asp-webshell

    2009-02-28 13:31:00
  • JS实现仿新浪微博发布内容为空时提示功能代码

    2023-08-22 21:52:13
  • 一些文档中没有介绍的SQL Server DBCC命令

    2008-12-09 14:24:00
  • js实现的全国省市二级联动下拉选择菜单完整实例

    2023-09-09 05:21:01
  • Linux安装卸载Mysql数据库

    2011-01-29 16:45:00
  • 描述性列表的表现形式

    2008-09-17 13:43:00
  • asp之家 网络编程 m.aspxhome.com