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实现过滤单个Android程序日志脚本分享
Jan 16 Python
python ansible服务及剧本编写
Dec 29 Python
Python3.6安装及引入Requests库的实现方法
Jan 24 Python
python多个模块py文件的数据共享实例
Jan 11 Python
Python标准库使用OrderedDict类的实例讲解
Feb 14 Python
用vue.js组件模拟v-model指令实例方法
Jul 05 Python
pycharm配置当鼠标悬停时快速提示方法参数
Jul 31 Python
Python 处理文件的几种方式
Aug 23 Python
Python 面向对象之封装、继承、多态操作实例分析
Nov 21 Python
python 命名规范知识点汇总
Feb 14 Python
python3 re返回形式总结
Nov 20 Python
OpenCV项目实践之停车场车位实时检测
Apr 11 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调用时间格式的参数详解
2013/06/06 PHP
PHP 二维数组根据某个字段排序的具体实现
2014/06/03 PHP
PHP连接MySQL进行增、删、改、查操作
2017/02/19 PHP
thinkphp5 加载静态资源路径与常量的方法
2017/12/24 PHP
20个最新的jQuery插件
2012/01/13 Javascript
jQuery表格排序组件-tablesorter使用示例
2014/05/26 Javascript
Jquery解析Json格式数据过程代码
2014/10/17 Javascript
DOM基础教程之使用DOM
2015/01/19 Javascript
检测一个函数是否是JavaScript原生函数的小技巧
2015/03/13 Javascript
js实现鼠标点击文本框自动选中内容的方法
2015/08/20 Javascript
JQuery fileupload插件实现文件上传功能
2016/03/18 Javascript
第四篇Bootstrap网格系统偏移列和嵌套列
2016/06/21 Javascript
jQuery Ajax前后端使用JSON进行交互示例
2017/03/17 Javascript
微信小程序page的生命周期和音频播放及监听实例详解
2017/04/07 Javascript
JS实现移动端实时监听输入框变化的实例代码
2017/04/12 Javascript
Vue父子组建的简单通信之控制开关Switch的实现
2018/06/04 Javascript
vue集成openlayers加载geojson并实现点击弹窗教程
2020/09/24 Javascript
Python中实现两个字典(dict)合并的方法
2014/09/23 Python
Python中给List添加元素的4种方法分享
2014/11/28 Python
Python实现比较两个列表(list)范围
2015/06/12 Python
python3人脸识别的两种方法
2019/04/25 Python
python实现时间序列自相关图(acf)、偏自相关图(pacf)教程
2020/06/03 Python
Python坐标轴操作及设置代码实例
2020/06/04 Python
使用numpngw和matplotlib生成png动画的示例代码
2021/01/24 Python
python正则表达式re.match()匹配多个字符方法的实现
2021/01/27 Python
HTML5中的Web Notification桌面右下角通知功能的实现
2018/04/19 HTML / CSS
HTML5 drag和drop具体使用详解
2021/01/18 HTML / CSS
如何做好总经理助理
2013/11/12 职场文书
人事助理自荐信
2014/02/02 职场文书
高中语文课后反思
2014/04/27 职场文书
升职演讲稿范文
2014/05/23 职场文书
乡镇机关党员民主评议表自我评价
2014/09/21 职场文书
2014年企业团支部工作总结
2014/12/10 职场文书
期末个人总结范文
2015/02/13 职场文书
详解Python类和对象内容
2021/06/22 Python
CSS实现五种常用的2D转换
2021/12/06 HTML / CSS