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 相关文章推荐
多线程爬虫批量下载pcgame图片url 保存为xml的实现代码
Jan 17 Python
Python两个整数相除得到浮点数值的方法
Mar 18 Python
python避免死锁方法实例分析
Jun 04 Python
学习python中matplotlib绘图设置坐标轴刻度、文本
Feb 07 Python
python3 破解 geetest(极验)的滑块验证码功能
Feb 24 Python
Python 读取某个目录下所有的文件实例
Jun 23 Python
pandas 条件搜索返回列表的方法
Oct 30 Python
Python实现的特征提取操作示例
Dec 03 Python
python使用梯度下降和牛顿法寻找Rosenbrock函数最小值实例
Apr 02 Python
pyinstaller打包找不到文件的问题解决
Apr 15 Python
Python爬取某平台短视频的方法
Feb 08 Python
python中openpyxl和xlsxwriter对Excel的操作方法
Mar 01 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
我的论坛源代码(十)
2006/10/09 PHP
使用php批量删除数据库下所有前缀为prefix_的表
2014/06/09 PHP
WordPress开发中用于获取近期文章的PHP函数使用解析
2016/01/05 PHP
Nigma vs Liquid BO3 第一场2.13
2021/03/10 DOTA
JavaScript 利用StringBuffer类提升+=拼接字符串效率
2009/11/24 Javascript
jquery.simple.tree插件 更简单,兼容性更好的无限树插件
2010/09/03 Javascript
基于JQuery实现的图片自动进行缩放和裁剪处理
2014/01/31 Javascript
jQuery获取父元素节点、子元素节点及兄弟元素节点的方法
2016/04/14 Javascript
Three.js快速入门教程
2016/09/09 Javascript
Angular2从搭建环境到开发步骤详解
2016/10/17 Javascript
Vue.js bootstrap前端实现分页和排序
2017/03/10 Javascript
Vue制作Todo List网页
2017/04/26 Javascript
JavaScript与Java正则表达式写法的区别介绍
2017/08/15 Javascript
VueJs 搭建Axios接口请求工具
2017/11/20 Javascript
JavaScript基于面向对象实现的猜拳游戏
2018/01/03 Javascript
Vue.js中该如何自己维护路由跳转记录
2019/05/19 Javascript
基于canvas实现手写签名(vue)
2020/05/21 Javascript
Python创建日历实例
2014/08/21 Python
python使用cStringIO实现临时内存文件访问的方法
2015/03/26 Python
python subprocess 杀掉全部派生的子进程方法
2017/01/16 Python
Python中return self的用法详解
2018/07/27 Python
使用PyQtGraph绘制精美的股票行情K线图的示例代码
2019/03/14 Python
Django集成搜索引擎Elasticserach的方法示例
2019/06/04 Python
利用pyecharts读取csv并进行数据统计可视化的实现
2020/04/17 Python
解决pycharm修改代码后第一次运行不生效的问题
2021/02/06 Python
Python绘制数码晶体管日期
2021/02/19 Python
解决pycharm 格式报错tabs和space不一致问题
2021/02/26 Python
解决Firefox下不支持outerHTML问题代码分享
2014/06/04 HTML / CSS
adidas旗下高尔夫装备供应商:TaylorMade Golf(泰勒梅高尔夫)
2016/08/28 全球购物
马来西亚在线购物市场:PGMall.my
2019/10/13 全球购物
信息专业本科生个人的自我评价
2013/10/28 职场文书
总经理的岗位职责
2014/02/23 职场文书
2015年幼儿园后勤工作总结
2015/04/25 职场文书
病假证明模板
2015/06/19 职场文书
2019年汽车租赁合同范本!
2019/08/12 职场文书
MySQL8.0的WITH查询详情
2021/08/30 MySQL