crawler-10 淘宝商品比价定向爬虫
1、目标网站:淘宝网
1 | https://s.taobao.com/ |
2、查看robots协议
1 | https://s.taobao.com/robots.txt |
3、注意
这个例子仅探讨技术实现,请不要不加限制的爬取该网!
4、功能描述
1)目标:获取淘宝搜索页面的信息,提取其中的商品名称和价格
2)理解: 淘宝的搜索接口
3)难点:翻页的处理
4)技术路线:requests‐re
5、浏览网站
1)登录之后,在淘宝网搜索“书包”,在结果页面进行翻页,观察网址变化。
1 | #起始页 |
2)结果分析
1 | #搜索接口 |
5、程序的结构设计
1)提交商品搜索请求,循环获取页面:getHtmlText(url);
2)对于每个页面,提取商品名称和价格信息:parsePage(ilt,html);
3)将信息输出到屏幕上:printGoodsList(ilt);
6、程序实例编写
1)程序框架
按照上一步骤中设计好的程序结构,先将程序整体的框架搭建起来,更利于我们有一个清晰的思路来编写代码。此程序整体思路就是,循环获取多个页面的信息,保存到 ilt 列表中,最后将该列表打印。
1 | import requests |
备注
1 | #这里的变量命名 |
2)具体实现
a)右键查看网页源代码,如下图,有一款书包价格为149.00,那么可以直接搜索149.00;
b)可以看到,价格信息保存在一个view_price键值对里面;
c)接下来检索商品名称,同样可以看到商品标题名称保存在raw_title键值对里面。
d)用正则表达式提所需信息
1 | #所需信息在网页源码里面的体现如下 |
价格数值匹配举例:
1 | import re |
标题匹配举例
1 | import re |
综上,提取商品名称和价格所需的正则表达式即如下
1 | \"view_price\"\:\"[\d\.]*\" |
e)利用eval函数去除双引号, eval() 函数用来执行一个字符串表达式,并返回表达式的值。
1 | import re |
f)parsePage(ilt,html)函数的实现
1 | def parsePage(ilt,html): |
g)printGoodsList(ilt)函数的实现
1 | def printGoodsList(ilt): |
3)整体源代码
1 | import requests |
7、问题与解决办法
上面的源码并不能爬取淘宝页面的商品,原因是该源码教程均是慕课网上几年前编写的,现在淘宝网做了登录验证功能,即使在浏览器上,打开淘宝网上搜索“书包”也必须要登录才能看到搜索结果。因此对于上述代码必须加以改进才能实现功能。
解决办法:暂时没有,按照网上的教程,加了cookie也没成功。