Python通过正则库爬取淘宝商品信息代码实例


Posted in Python onMarch 02, 2020

使用正则库爬取淘宝商品的商品信息,首先我们需要确定想要爬取的对象

我们在淘宝里搜索“python”,出来的结果

Python通过正则库爬取淘宝商品信息代码实例

从url连接中可以得到搜索商品的关键字是“q=”,所以我们要用的起始url为:https://s.taobao.com/search?q=python

然后翻页,经过对比发现,翻页后,变化的关键字是s,每次翻页,s便以44的倍数增长(可以数一下每页显示的商品数量,刚好是44)
所以可以根据关键字“s=”,来设置爬取的深度(爬取多少页)

右键查看源码,商品名称可能的关键字是“title”和“raw_title”,进一步多看几个商品的名称,发现选取“raw_title”比较合适;商品价格自然就是“view_price”(通过比对淘宝商品展示页面);所以商品名称和商品价格分别是以"raw_title":"名称"和"view_price":"价格",这样的键/值对的形式展示的。

# coding:utf-8

import requests
import re

goods = '水杯'
url = 'https://s.taobao.com/search?q=' + goods

r = requests.get(url=url, timeout=10)
html = r.text

tlist = re.findall(r'\"raw_title\"\:\".*?\"', html) # 正则提取商品名称
plist = re.findall(r'\"view_price\"\:\"[\d\.]*\"', html) # 正则提示商品价格

print(tlist)
print(plist)
print(type(plist)) # 正则表达式提取出的商品名称和商品价格都是以列表形式存储数据的

利用for循环,把每个商品的名称和价格组成一个列表,然后把这写列表再追加到一个大列表中:

goodlist = []
for i in range(len(tlist)):
  title = eval(tlist[i].split(':')[1]) # eval()函数简单说就是用于去掉字符串的引号
  price = eval(plist[i].split(':')[1])
  goodlist.append([title, price]) # 把每个商品的名称和价格组成一个小列表,然后把所有商品组成的列表追加到一个大列表中
  print(goodlist)

大概的思路就是这样的。

def get_html(url):
  """获取源码html"""
  try:
    r = requests.get(url=url, timeout=10)
    r.encoding = r.apparent_encoding
    return r.text
  except:
    print("获取失败")
def get_data(html, goodlist):
  """使用re库解析商品名称和价格
  tlist:商品名称列表
  plist:商品价格列表"""
  tlist = re.findall(r'\"raw_title\"\:\".*?\"', html)
  plist = re.findall(r'\"view_price\"\:\"[\d\.]*\"', html)
  for i in range(len(tlist)):
    title = eval(tlist[i].split(':')[1]) # eval()函数简单说就是用于去掉字符串的引号
    price = eval(plist[i].split(':')[1])
    goodlist.append([title, price])


def write_data(list, num):
  # with open('E:/Crawler/case/taob2.txt', 'a') as data:
  #  print(list, file=data)
  for i in range(num): # num控制把爬取到的商品写进多少到文本中
    u = list[i]
    with open('E:/Crawler/case/taob.txt', 'a') as data:
      print(u, file=data)


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) # 因为淘宝显示每页44个商品,第一页i=0,一次递增
      html = get_html(url)
      get_data(html, infoList)
    except:
      continue
  write_data(infoList, len(infoList))
if __name__ == '__main__':
  main()

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
在Python的Flask框架下使用sqlalchemy库的简单教程
Apr 09 Python
Python的迭代器和生成器
Jul 29 Python
详解django中自定义标签和过滤器
Jul 03 Python
Python3解释器知识点总结
Feb 19 Python
Python3 log10()函数简单用法
Feb 19 Python
python opencv实现图像边缘检测
Apr 29 Python
python pandas cumsum求累计次数的用法
Jul 29 Python
Django实现发送邮件找回密码功能
Aug 12 Python
python2.7实现复制大量文件及文件夹资料
Aug 31 Python
将python字符串转化成长表达式的函数eval实例
May 11 Python
Django-imagekit的使用详解
Jul 06 Python
Pycharm配置autopep8实现流程解析
Nov 28 Python
基于Python爬取爱奇艺资源过程解析
Mar 02 #Python
python GUI库图形界面开发之PyQt5树形结构控件QTreeWidget详细使用方法与实例
Mar 02 #Python
Python处理mysql特殊字符的问题
Mar 02 #Python
新手入门学习python Numpy基础操作
Mar 02 #Python
python中数据库like模糊查询方式
Mar 02 #Python
python读取文件指定行内容实例讲解
Mar 02 #Python
python GUI库图形界面开发之PyQt5选项卡控件QTabWidget详细使用方法与实例
Mar 01 #Python
You might like
php 静态页面中显示动态内容
2009/08/14 PHP
php递归遍历多维数组的方法
2015/04/18 PHP
PHP限制HTML内容中图片必须是本站的方法
2015/06/16 PHP
如何解决PHP使用mysql_query查询超大结果集超内存问题
2016/03/14 PHP
PHP文件操作实例总结【文件上传、下载、分页】
2018/12/08 PHP
一些有关检查数据的JS代码
2006/09/07 Javascript
js 去除字符串第一位逗号的方法
2014/06/07 Javascript
javascript实现仿百度图片的瀑布流加载效果
2016/04/20 Javascript
JavaScript比较当前时间是否在指定时间段内的方法
2016/08/02 Javascript
vue-resource调用promise取数据方式详解
2017/07/21 Javascript
javascript实现数字配对游戏的实例讲解
2017/12/14 Javascript
JavaScript设计模式之建造者模式实例教程
2018/07/02 Javascript
angularJs使用ng-repeat遍历后选中某一个的方法
2018/09/30 Javascript
JS实现简单的点赞与踩功能示例
2018/12/05 Javascript
浅谈vue后台管理系统权限控制思考与实践
2018/12/19 Javascript
vue使用el-upload上传文件及Feign服务间传递文件的方法
2019/03/15 Javascript
Vue表单之v-model绑定下拉列表功能
2019/05/14 Javascript
vue使用微信JS-SDK实现分享功能
2019/08/23 Javascript
vue+elementui实现点击table中的单元格触发事件--弹框
2020/07/18 Javascript
python中zip和unzip数据的方法
2015/05/27 Python
Python使用回溯法子集树模板解决爬楼梯问题示例
2017/09/08 Python
ubuntu中配置pyqt4环境教程
2017/12/27 Python
不到40行代码用Python实现一个简单的推荐系统
2019/05/10 Python
Python日志无延迟实时写入的示例
2019/07/11 Python
python创建子类的方法分析
2019/11/28 Python
python super用法及原理详解
2020/01/20 Python
Python 改变数组类型为uint8的实现
2020/04/09 Python
Python使用Paramiko控制liunx第三方库
2020/05/20 Python
Html5 postMessage实现跨域消息传递
2016/03/11 HTML / CSS
html5中为audio标签增加停止按钮动作实现方法
2013/01/04 HTML / CSS
JBL英国官网:JBL UK
2018/07/04 全球购物
Wilson体育用品官网:美国著名运动器材品牌
2019/05/12 全球购物
Everlast官网:拳击、综合格斗和健身相关的体育用品
2020/08/03 全球购物
个人自我评价分享
2013/12/20 职场文书
找工作最新求职信
2013/12/22 职场文书
求职简历中个人的自我评价
2013/12/25 职场文书