【6】实战:利用re模块爬取淘宝商品信息

本文介绍如何使用Python的re模块和requests库实现对淘宝商品搜索结果的爬取,包括确定目标URL、提取商品名称和价格等关键信息。

基本介绍

正则表达式是一种匹配字符串的工具。它提供了一系列的规则即用法,也就是给字符串定义一系列规则,凡是符合规则的字符串,我们就认为它“匹配”了,否则,该字符串就是不合法的。
正则表达式常见规则和用法如下;

  1. \d ‘ 表示匹配一个数字,eg:’\d\d\d’可以表示三个任意数字
  2. \w‘ 表示匹配一个字母或数字,eg:‘\w\w\d’可以匹配bs4
  3. .‘ 表示匹配任意字符
  4. \s’表示匹配一个空白字符,如<空格>\t\r\n\f\v等等
  5. *’表示任意个字符(包括0个),eg:‘.*’可以匹配任意字符任意次
  6. '+'表示至少一个字符
  7. ?’表示出现0或1次
  8. '{x,y}'表示出现x~y次
  9. {x}’表示出现x次
  10. A|B’表示匹配A或者B
  11. .‘^’表示行的开头
  12. $’表示行的结束
  13. []’用来限定范围,如[_0-9a-zA-Z]可以匹配一个数字、一个字母或者一个下划线

注意贪婪匹配的问题:
表达式‘.*’就是单个字符匹配任意次,即贪婪匹配。 表达式‘.*?’ 是满足条件的情况只匹配一次

有了以上正则表达式的基本知识,就可以了解一下python自带的re模块了:
re模块下的主要功能函数如下图所示:
re功能函数
而通过re.compile(strPattern[, flag])方法来得到pattern对象,结合上述函数可利用指定的正则表达式进行多次匹配。
而得到的match对象有如下属性:
match对象属性
具体可以参考这篇博客文章:pythonRE模块的使用
正如文章中所言:使用re的一般步骤是先将正则表达式的字符串形式编译为Pattern实例,然后使用Pattern实例处理文本并获得匹配结果(一个Match实例),最后使用Match实例获得信息,再进行其他的操作。

确定目标数据页URL

首先,我们在淘宝网站搜索’python’:
搜索python
而搜索栏URL为:
在这里插入图片描述
我们可以从中看到关键字’python’,而后面还有一系列参数,大致上描述了编码信息、搜索日期、搜索状态等等。我们把这些参数情清空,此时刷新后为:
在这里插入图片描述
可以发现内容没有差别,所以我们简化UR为https://s.taobao.com/search?q=python
接下来,我们向后翻页,继续观察URL:
第二页:
在这里插入图片描述
第三页:
在这里插入图片描述
可以简单观察到十分有规律,而bcoffset与ntoffset从名字简单推测就是一些偏移量,而最后的s,估计是顺序/序列sequence的缩写。
故而我们简化URL为:
https://s.taobao.com/search?q=‘+ str(“搜索关键字”) + ’ &s=’ + str(44 * n)
其中n表示第n页。

确定目标字段

假设我们要爬取商品的名称与价格。
首先,通过查看网页源代码,找到目标所在位置:
名称:

价格:
在这里插入图片描述
继而我们可以确定匹配名称与价格的正则表达式分别为:

r'"view_price":"[\d.]*"'#匹配价格
r'"raw_title":".*?"'#匹配名称

其中r表示非转义字符的原始字符串,即不含转义字符,反斜杠为普通字符

除此之外,我们还需要利用split()函数,将名称与价格从匹配的字符串中切出来:
最终我们可以写成如下函数:

#利用re来解析html文本
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
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值