美文网首页大数据 爬虫Python AI SqlPython小哥哥
带大家用Python爬取淘宝两千款套套

带大家用Python爬取淘宝两千款套套

作者: 轻松学Python111 | 来源:发表于2019-10-12 14:39 被阅读0次
    image

    警告:本教程仅用作学习交流,请勿用作商业盈利,违者后果自负!如本文有侵犯任何组织集团公司的隐私或利益,请告知联系小编删除!!!

    一、淘宝登录复习

    前面我们已经介绍过了如何使用requests库登录淘宝,收到了很多同学的反馈和提问,小编我感到很欣慰,同时对那些没有及时回复的同学说声抱歉!

    顺便再提一下这个登录功能,代码是完全没有问题。如果你登录出现申请st码失败的错误时候,可以更换_verify_password方法中的所有请求参数。

    image

    在淘宝登录2.0改进中我们增加了cookies序列化的功能,目的就是为了方便爬取淘宝数据,因为如果你同一个ip频繁登录淘宝的话可能就会触发淘宝的反扒机制!

    关于淘宝登录的成功率,在小编实际的使用中基本都能成功,如果不成功就按上面的方法更换登录参数!

    二、淘宝商品信息爬取

    这篇文章主要是讲解如何爬取数据,数据的分析放在下一篇。之所以分开是因为爬取淘宝遇到的问题太多,而小编又打算详细再详细的为大家讲解如何爬取,所以考虑篇幅及同学吸收率方面就分两篇讲解吧!宗旨还会不变:让小白也能看得懂!

    本次爬取是调用淘宝pc端搜索接口,对返回的数据进行提取、然后保存为excel文件!

    看似一个简单的功能却包含了很多问题,我们来一点一点往下看吧!

    三、爬取单页数据

    开始写一个爬虫项目我们都需要量化后再分步,而一般第一步便是先爬取一页试试!

    1.查找加载数据URL

    我们在网页中打开淘宝网,然后登录,打开chrome的调试窗口,点击network,然后勾选上Preserve log,在搜索框中输入你想要搜索的商品名称

    image

    这是第一页的请求,我们查看了数据发现:返回的商品信息数据插入到了网页里面,而不是直接返回的纯json数据!

    image

    2. 是否有返回纯json数据接口?

    然后小编就好奇有没有返回纯json的数据接口呢?于是我就点了下一页(也就是第二页)

    image

    请求第二页后小编发现返回的数据竟然是纯json,然后比较两次请求url,找到只返回json数据的参数!

    image

    通过比较我们发现搜索请求url中如果带ajax=true参数的话就直接返回json数据,那我们是不是可以直接模拟直接请求json数据!

    所以小编就直接使用第二页的请求参数去请求数据(也就是直接请求json数据),但是请求第一页就出现错误:

    image

    直接返回一个链接而 不是json数据,这个链接是什么鬼?点一下。。。

    image

    铛铛铛,滑块出现,有同学会问:用requests能搞定淘宝滑块吗?小编咨询过几个爬虫大佬,滑块的原理是收集响应时间,拖拽速度,时间,位置,轨迹,重试次数等然后判断是否是人工滑动。而且还经常变算法,所以猪哥选择放弃这条路!

    3.使用请求网页接口

    所以我们选择类似第一页(请求url中不带ajax=true参数,返回整个网页形式)的请求接口,然后再把数据提取出来!

    image

    这样我们就可以爬取到淘宝的网页信息了

    四、提取商品属性

    爬到网页之后,我们要做的就是提取数据,这里先从网页提取json数据,然后解析json获取想要的属性。

    1.提取网页中商品json数据

    既然我们选择了请求整个网页,我们就需要了解数据内嵌在网页的哪个位置,该怎么提取出来。

    经过小编搜索比较发现,返回网页中的js参数:g_page_config就是我们要的商品信息,而且也是json数据格式!

    image

    然后我们写一个正则就可以将数据提取出来了!

    <pre class="public-DraftStyleDefault-pre" data-offset-key="4uul8-0-0" style="margin: 1.4em 0px; padding: 0.88889em; font-size: 0.9em; word-break: normal; word-wrap: normal; white-space: pre; overflow: auto; background: rgb(246, 246, 246); border-radius: 4px; color: rgb(26, 26, 26); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px;">

    <pre class="Editable-styled" data-block="true" data-editor="naeq" data-offset-key="4uul8-0-0" style="margin: 0px; padding: 0px; font-size: 0.9em; word-break: normal; word-wrap: normal; white-space: pre; overflow: initial; background: rgb(246, 246, 246); border-radius: 0px;">

    goods_match = re.search(r'g_page_config = (.*?)}};', response.text)

    </pre>

    </pre>

    2.获取商品价格等信息

    要想提取json数据,就要了解返回json数据的结构,我们可以将数据复制到一些json插件或在线解析

    image

    了解json数据结构之后,我们就可以写一个方法去提取我们想要的属性了

    image

    五、保存为excel

    操作excel有很多库,网上有人专门针对excel操作库做了对比与测评感兴趣可以看看:https://dwz.cn/M6D8AQnq

    小编选择使用pandas库来操作excel,原因是pandas比较操作方便且是比较常用数据分析库!

    1.安装库

    pandas库操作excel其实是依赖其他的一些库,所以我们需要安装多个库

    <pre class="public-DraftStyleDefault-pre" data-offset-key="cfsqd-0-0" style="margin: 1.4em 0px; padding: 0.88889em; font-size: 0.9em; word-break: normal; word-wrap: normal; white-space: pre; overflow: auto; background: rgb(246, 246, 246); border-radius: 4px; color: rgb(26, 26, 26); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px;">

    <pre class="Editable-styled" data-block="true" data-editor="naeq" data-offset-key="cfsqd-0-0" style="margin: 0px; padding: 0px; font-size: 0.9em; word-break: normal; word-wrap: normal; white-space: pre; overflow: initial; background: rgb(246, 246, 246); border-radius: 0px;">

    pip install xlrd
    pip install openpyxl
    pip install numpy
    pip install pandas

    </pre>

    </pre>

    2.保存excel

    image

    这里有点坑的是pandas操作excel没有追加模式,只能先读取数据后使用append追加再写入excel!

    查看效果

    image

    六、批量

    一次爬取的整个流程(爬取、数据提取、保存)完成之后,我们就可以批量循环调用了。

    image

    这里设置的超时秒数是猪哥实践出来的,从3s、5s到10s以上,太频繁容易出现验证码!

    image

    小编分多次爬取了两千多条数据

    image

    七、爬取淘宝遇到的问题

    爬取淘宝遇到了非常多的问题,这里为大家一一列举:

    1.登录问题

    image

    问题:申请st码失败怎么办? 回答:更换_verify_password方法中的所有请求参数。

    参数没问题的话登录基本都会成功!

    2.代理池

    为了防止自己的ip被封,小编使用了代理池。爬取淘宝需要高质量的ip才能爬取,小编试了很多网上免费的ip,基本都不能爬取。

    image

    但是有一个网站的ip很好 站大爷:http://ip.zdaye.com/dayProxy.html ,这个网站每小时都会更新一批ip,小编试过还是有很多ip是可以爬取淘宝的。

    3.重试机制

    为了防止正常请求失败,小编在爬取的方法上加上了重试机制!

    image

    需要安装retry库

    <pre class="public-DraftStyleDefault-pre" data-offset-key="640pa-0-0" style="margin: 1.4em 0px; padding: 0.88889em; font-size: 0.9em; word-break: normal; word-wrap: normal; white-space: pre; overflow: auto; background: rgb(246, 246, 246); border-radius: 4px; color: rgb(26, 26, 26); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px;">

    <pre class="Editable-styled" data-block="true" data-editor="naeq" data-offset-key="640pa-0-0" style="margin: 0px; padding: 0px; font-size: 0.9em; word-break: normal; word-wrap: normal; white-space: pre; overflow: initial; background: rgb(246, 246, 246); border-radius: 0px;">

    pip install retry

    </pre>

    </pre>

    4.出现滑块

    上面那些都没问题,但是还是会出现滑块,小编测试过很多次,有些爬取20次-40次左右最容易出现滑块。

    image

    出现滑块只能等个半小时后继续爬,因为目前还不能使用requests库解决滑块,后面学习selenium等其他框架看看是否能解决!

    5.目前这只爬虫

    目前这只爬虫并不完善,只能算是半成品,有很多可以改进的地方,比如自动维护ip池功能,多线程分段爬取功能,解决滑块问题等等,后面我们一起来慢慢完善这只爬虫,使他可以成为一只完善懂事的爬虫!

    相关文章

      网友评论

        本文标题:带大家用Python爬取淘宝两千款套套

        本文链接:https://www.haomeiwen.com/subject/thtuuctx.html