趁热需打铁,随着这几天的鸡血澎湃,我们来实现一下爬取淘宝商品信息,我记得几年前曾用python写了下抓取淘宝天猫,京东,拍拍的爬虫,专门采集商品信息,图片,评论及评论图片,我还用pyqt开发了个客户端,效果还不错,也让我用python赚了一些外快,来来来,千言万语也阻挡不了我一个显摆的心,贴2张多年前用python+pyqt开发的爬商品信息的软件

我觉得当时我这个在爬淘宝这些软件当中外观是最高大尚的,无奈木秀于林,风必摧之,扛不住同行的嫉妒,在平台直接举报我,商品下架Game over! 深深的打击了我这颗幼小的心灵,社会原来还有这么黑暗的一面,一刀深深的刺痛我心……

至此之后再也没有去抓淘宝信息了……峰回路转,最近头脑发热,想学学那些博主写写教程什么的,此刻让我这颗沉沦的心又从新燃烧起来,为了广大小白的一个爬虫梦,我决定重操旧业……额,当我准备素材的时候,我发现最近爬取淘宝信息要先登录了,看来经过几年的洗礼,淘宝也扛不住广大爱好者的热情,为了稳定舍弃一部分用户的体验,深度谴责这种行为~~!

既然这样,你也无法阻挡那些有着梦想的少年心,仔细分析了下,在登录中,有个重要的参数UA,跟踪了下算法,JS混淆加密,看得我头疼,既然这里是小白学习的教程,那我就简化一下爬取商品信息的重要操作步骤:

1. 这里我们直接用cookie,将cookie放入headers请求头部信息,模拟浏览器访问

2.为了防止频繁访问,淘宝会弹出滑块验证的问题,这里我们会结合上篇所讲的Ip池的运用

接下来进入正题,比如我要抓取关键词为python的商品信息页面,那简化下搜索的地址:

https://s.taobao.com/search?q=python

下面我们就来获取这个页面的源码信息:

#代理Ip地址
proxies = {'https': '47.106.59.75:3128'}
User_Agent = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36'
#封装一下请求头部
headers = {'User-Agent': User_Agent,'cookie': self.getcookie()}
#淘宝搜索关键词为python的网址,q=后面是你要搜索的关键词
url='https://s.taobao.com/search?q=python'
#下面是使用头部信息和代理Ip开始请求访问
response = requests.get(url=url,headers=headers,proxies=proxies,timeout=5)
response.encoding = response.apparent_encoding
content = response.text
print(content)

其它注释基本都能看懂吧,之前的教程也提到过,重点说下cookie值,这里self.getcookie()是什么呢,是我写的一个读取cookie的方法,因为cookie是有时效性的,为了方便,我将cookie保存在一个命名为cookie.txt的文件里,方便更新及维护

#读取cookie
def getcookie(self):with open('cookie.txt', 'r', encoding='utf-8') as f:cookie = f.read()return cookie

大家又看到def啊,self什么什么的,没错,我将整个爬虫封装了一个类文件,然后将一些通用的方法定义一下函数,那关键又来了,童鞋们又问,cookie从何而来,当然是从浏览器开发者中工具中来,首先我们在浏览器中打开https://s.taobao.com/search?q=python这个网址,如果你淘宝没有登录的话,会直接跳转到登录页面,先输入自己的淘宝账号登录,登录后会调回这个页面,接着我们还是轻轻的按下F12,弹出开发者工具窗口后,我们按F5刷新下页面,在密密麻麻的地址中找到这个:

如果不好找的话,选择这项:

然后点击这栏,选择headers,找个Request  Headers:

往下翻,找到cookie值:

然后不管三七二十一,直接将这段cookie值复制保存到你代码同级目录下的cookie.txt文件里,这样cookie值的获取就成功了,通过上面的代码就能获取搜索页面的源码内容,我们先分析下源码内容,发现是json串格式的:

淘宝的源码内容不是html标签,而是在script里,通过方法渲染成html标签,来,我们继续分析,发现我们需要的信息在‘auctions’,这里对于小白来说有点深奥(有需要以后可以专门讲下这个东西),‘auctions’是一个数组形式的,因为存在多个商品,这里很长一串,我们怎么快速的获取到这个内容呢,我们就用正则将这部分提取出来, re.search('"auctions":([\w\S\s]+),"recommendAuctions"', tbjsonstr)这句话的意思就是获取"auctions":和,"recommendAuctions"之间所有的内容包含空格换行,

#将获取到的源码内容过滤下,里面有很多\n的换行符,我们先去掉这些换行符
tbjsonstr = re.sub('\\n', '', content)
#通过观察我们要的商品信息的数据在"auctions":和,"recommendAuctions"这个之间,于是我们获取这段
result = re.search('"auctions":([\w\S\s]+),"recommendAuctions"', tbjsonstr)
#通过正则获取到括号里的内容
resultstr=result.group(1)
#这里把提取到的内容转成dict类型,方便获取详细参数
tblist=json.loads(resultstr,encoding="utf-8")
#循环遍历下信息
for tbinfo in tblist:print(tbinfo['raw_title'],tbinfo['nick'],tbinfo['view_price'],tbinfo['view_sales'],t

详细看下代码里的注释,这里用到了re函数的search,关键就是[\w\S\s]+这里,加了括号是为了提取匹配的字符串,获取到的内容如下:

这里获取到的是文本类型的,为了使用JSON格式,我们用json函数方法转换下:json.loads(resultstr,encoding="utf-8"),然后就开始循环一下数组,在JSON中提取所需要的字段信息,方法上面代码所示,这个为了便于观察,将json数据格式化了一下:

不贴结果图的文章永远不是好文章,来我们打印一下结果看看:

到此就抓到了我们需要的商品信息,感觉才讲到一半,篇幅有点长,第1点我们完成了,接下来我们完成第2点就是用上ip池,防止频繁访问出现滑动验证码等问题,其实也简单先贴下方法:

#获取ip池
def get_ips(self):with open('tbip.txt', 'r', encoding='utf-8') as f:tbips = f.read()tbipsarray = tbips.split('\n')#过滤空字符tbipsarray=list(filter(None, tbipsarray))return tbipsarray#随机获取一个ip
def randomip(self):# 获取最新ip池self.ips = self.get_ips()randomip = random.choice(self.ips)return randomip#删除失效的ip地址
def del_ip(self,delip):with open("tbip.txt", "w", encoding="utf-8") as f:for i,ip in enumerate(self.ips):if delip == ip:continuef.write(ip+"\n")

这里呢,封装了3个方法,第1个方法是获取通过上篇生成的ip池,第2个方法是获取随机一个随机ip,第3个方法是删除掉失效的ip也就是删掉这个通过代理无法访问淘宝网的ip,方便释放资源,避免无效ip的重复请求,通过这个方式,后期再完善一下,可以实现自动抓取ip,自动过滤无效ip,是不是解放了双手。

那上面的方法在哪里使用呢,这里……这里……,首先我们在类的初始化函数定义一下:

    def __init__(self):#定义失败次数self.failnum=0#随机获取一个Ipself.rip = self.randomip()

同理因为在使用代理的时候,可能由于代理ip过期等一下异常原因,我们还是给请求淘宝网址那段代码加个try,抛出一下异常,接着我们在异常情况下处理一下逻辑:

        try:…………………………(省略上面的代码)except Exception as e:#尝试访问失败超过3次,删除当前IP地址,重置失败次数,重新获取ip地址self.failnum+=1if self.failnum > 3:#初始化失败次数回归为0self.failnum = 0#删除失效的IPself.del_ip(self.rip)#随机获取一个IPself.rip = self.randomip()print('重新获取IP:{}'.format(self.rip))else:print('ip:{},尝试链接次数:{} 次'.format(self.rip, self.failnum))#重新访问此方法self.get_info()

上面注释得很清楚了吧,这里我就不在解释了,感觉写完心里空荡荡的(赶紧点赞……)

好了,白嫖兄弟,可以开赞了……,完整代码双手奉上:

#coding:utf-8
import requests,random,re,jsonclass taobao:def __init__(self):#定义失败次数self.failnum=0#随机获取一个Ipself.rip = self.randomip()#获取淘宝列表信息def get_info(self):#代理ip地址proxies = {'https': self.rip}User_Agent = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36'#封装请求头部信息headers = {'User-Agent': User_Agent,'cookie': self.getcookie()}#淘宝搜索关键ptyhon的网址url='https://s.taobao.com/search?q=python'try:response = requests.get(url=url,headers=headers,proxies=proxies,timeout=5)response.encoding = response.apparent_encodingcontent = response.texttbjsonstr = re.sub('\\n', '', content)result = re.search('"auctions":([\w\S\s]+),"recommendAuctions"', tbjsonstr)resultstr=result.group(1)print(resultstr)tblist=json.loads(resultstr,encoding="utf-8")for tbinfo in tblist:print(tbinfo['raw_title'],tbinfo['nick'],tbinfo['view_price'],tbinfo['view_sales'],tbinfo['item_loc'])except Exception as e:#尝试访问失败超过3次,删除当前IP地址,重置失败次数,重新获取ip地址self.failnum+=1if self.failnum > 3:#初始化失败次数回归为0self.failnum = 0#删除失效的IPself.del_ip(self.rip)#随机获取一个IPself.rip = self.randomip()print('重新获取IP:{}'.format(self.rip))else:print('ip:{},尝试链接次数:{} 次'.format(self.rip, self.failnum))#重新访问此方法self.get_info()#读取cookiedef getcookie(self):with open('cookie.txt', 'r', encoding='utf-8') as f:cookie = f.read()return cookie#获取ip池def get_ips(self):with open('tbip.txt', 'r', encoding='utf-8') as f:tbips = f.read()tbipsarray = tbips.split('\n')#过滤空字符tbipsarray=list(filter(None, tbipsarray))return tbipsarray#随机获取一个ipdef randomip(self):# 获取最新ip池self.ips = self.get_ips()randomip = random.choice(self.ips)return randomip#删除失效的ip地址def del_ip(self,delip):with open("tbip.txt", "w", encoding="utf-8") as f:for i,ip in enumerate(self.ips):if delip == ip:continuef.write(ip+"\n")if __name__ == '__main__':tb=taobao()tb.get_info()

好了,简单的爬取淘宝信息就到这里,其实里面还有些用法,大家自己揣摩下,比如self.ips怎么用到全局的等等,有兴趣的老铁们以后可以逐步拓展,然后形成一个强大的抓取工具,如我开篇所示……

江湖不说再见,咱们下篇见!

关注公众号,发现不一样的自我

如果有需要了解的和不明白的地方可以给我留言,我会整理一些代码提供参考

江湖小白之一起学Python (五)爬取淘宝商品信息相关推荐

  1. Python requests爬取淘宝商品信息

    作者:achen 联系方式:wh909077093 这里记一下大概的思路以及实现方法,有基础的小伙伴看了基本就能实现了,如果有业务需要可以联系我哈哈哈哈哈哈 本文代码参考猪哥66的思路 项目内容 指定 ...

  2. python简单爬取淘宝商品信息

    爬取淘热卖商品"泡面"的信息,包括商品名称,店铺,链接,付款人数,价格等,用csv保存 import requests import csv import time import ...

  3. python爬虫 — 爬取淘宝商品信息

    (一)确定需要爬取的信息 在爬取前首先确定需要获取的信息,打开taobao,在搜索框中输入,需要获取的商品的信息,比如ipad,点击搜索 就可以看到许多的ipad,选择其中的一款商品,比如第一个 可以 ...

  4. Python搜索爬取淘宝商品信息并存储为csv文件(名称、店铺、销量、地址等)

    功能是搜索商品,并把搜到的商品信息一一爬取(多个页面): 爬取商品名称.店铺名称.销量.评论数量.地址等等,然后把信息存储为csv文件- 效果: 首先是程序运行 运行完后可以看到目录下出现了一个csv ...

  5. 使用python selenium爬取淘宝商品信息 自动登录淘宝和爬取某一宝贝的主图,属性图和详情图等等

    selenium作为一个自动化测试工具非常好用,谁用谁知道啊. 先说如何登录淘宝,淘宝现在直接用会员名和密码登录会有滑块验证,找了网上说的几种方法和自己尝试了一番效果还是不太理想,实测过程中,即使滑块 ...

  6. python+selenium爬取淘宝商品信息+淘宝自动登录——爬虫实战

    1.前言 继续学习爬虫内容,这回是以selenium模拟操作进行抓取,其中有几个需要登陆的注意事项. 2.自动登陆+查找页面 由于现在淘宝的反爬机制,需要登陆才好下一步操作.在搜索输入后页面会调入登陆 ...

  7. 使用python爬取淘宝商品信息

    使用python爬虫爬取淘宝商品信息 使用的模块主要有 selenium ,time , re, from selenium import webdriver import time import c ...

  8. Python + selenium 爬取淘宝商品列表及商品评论 2021-08-26

    Python + selenium 爬取淘宝商品列表及商品评论[2021-08-26] 主要内容 登录淘宝 获取商品列表 获取评论信息 存入数据库 需要提醒 主要内容 通过python3.8+ sel ...

  9. Python爬取淘宝商品信息保存到Excel

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取 python免费学习资 ...

  10. python爬虫——用selenium爬取淘宝商品信息

    python爬虫--用selenium爬取淘宝商品信息 1.附上效果图 2.淘宝网址https://www.taobao.com/ 3.先写好头部 browser = webdriver.Chrome ...

最新文章

  1. 机器学习数据预处理之缺失值:最小值最大值填充
  2. CSP认证201403-3 命令行选项[C++题解]:模拟题、字符串处理、stringstream处理getline
  3. 由 Session 和 Cookie 的区别说起
  4. manifold learning 流形学习 zz
  5. java 全局变量 跳出递归循环_Java技术知识点的一些总结
  6. oracle 赋值到cmd,CMD操作oracle数据导库过程图解
  7. vue 导出html
  8. 工作290:js日期操作
  9. Mapillary发布世界最大交通标志数据集,用于自动驾驶研究
  10. IE6/7 double padding-bottom Bug
  11. 2020 macbook pro 16寸 前端开发 我的装机软件整理
  12. 【稀饭】react native 实战系列教程之热更新原理分析与实现
  13. Echart添加水印
  14. Unity立体几何 点到直线距离计算
  15. 2021年茶艺师(中级)考试内容及茶艺师(中级)找解析
  16. C语言——三位数排序
  17. 《神奇的数学》读后感_《走进奇妙的数学世界》读后感
  18. 程序人生--hello‘s P2P(From Program to Process)
  19. C语言求两个正整数的最小公倍数
  20. 互联网开发岗实习及秋招总结

热门文章

  1. 微信获取用户信息 ”微信用户“
  2. 龙应台祝贺莫言获诺奖:好家伙你得奖了-莫言-诺贝尔文学奖-龙应台
  3. 菲利普-泰特洛克的超预测速成课程(如何玩预测)
  4. 网络多人游戏架构与编程 学习笔记
  5. UMP系统功能 分库分表
  6. lenovo微型计算机c320拆机,lenovo c4030一体机怎么拆机添加内存条?
  7. ETABS二次开发的python实现——SetModelIsLocked(设置模型是否被锁定)
  8. ASUS-Z97K-4980HQ-Hackintosh黑苹果EFI引导文件
  9. 乐优商场项目day13—页面渲染
  10. global global_我们在Global Game Jam 2016上所做的工作