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 相关文章推荐
同时安装Python2 & Python3 cmd下版本自由选择的方法
Dec 09 Python
利用python将图片转换成excel文档格式
Dec 30 Python
python使用tkinter实现简单计算器
Jan 30 Python
python3解析库lxml的安装与基本使用
Jun 27 Python
对python多线程与global变量详解
Nov 09 Python
python保存二维数组到txt文件中的方法
Nov 15 Python
tensorflow模型继续训练 fineturn实例
Jan 21 Python
解决pycharm中opencv-python导入cv2后无法自动补全的问题(不用作任何文件上的修改)
Mar 05 Python
matplotlib 曲线图 和 折线图 plt.plot()实例
Apr 17 Python
python要安装在哪个盘
Jun 15 Python
Python通过Schema实现数据验证方式
Nov 12 Python
Python创建SQL数据库流程逐步讲解
Sep 23 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
正义联盟的终局之战《天启星战争》将成为DC动画宇宙的最后一部
2020/04/09 欧美动漫
PHP4在WinXP下IIS和Apache2服务器上的安装实例
2006/10/09 PHP
在JavaScript中调用php程序
2009/03/09 PHP
Linux下PHP连接Oracle数据库
2014/08/20 PHP
PHP中魔术变量__METHOD__与__FUNCTION__的区别
2014/09/29 PHP
PHP实现QQ、微信和支付宝三合一收款码实例代码
2018/02/19 PHP
js/jQuery对象互转(快速操作dom元素)
2013/02/04 Javascript
jquery中使用$(#form).submit()重写提交表单无效原因分析及解决
2013/03/25 Javascript
JS中prototype关键字的功能介绍及使用示例
2013/07/21 Javascript
JS将秒换成时分秒实现代码
2013/09/03 Javascript
jquery ready函数、css函数及text()使用示例
2013/09/27 Javascript
jQuery循环滚动新闻列表示例代码
2014/06/17 Javascript
js完美解决IE6不支持position:fixed的bug
2015/04/24 Javascript
jquery实现二级导航下拉菜单效果
2015/12/18 Javascript
JavaScript的设计模式经典之代理模式
2016/02/24 Javascript
vue-cli脚手架build目录下utils.js工具配置文件详解
2018/09/14 Javascript
vue 实现边输入边搜索功能的实例讲解
2018/09/16 Javascript
React 源码中的依赖注入方法
2018/11/07 Javascript
Easyui 去除jquery-easui tab页div自带滚动条的方法
2019/05/10 jQuery
countup.js实现数字动态叠加效果
2019/10/17 Javascript
vue 解决addRoutes多次添加路由重复的操作
2020/08/04 Javascript
[01:04:06]DOTA2上海特级锦标赛A组资格赛#2 Secret VS EHOME第一局
2016/02/26 DOTA
ubuntu环境下python虚拟环境的安装过程
2018/01/07 Python
Python闭包函数定义与用法分析
2018/07/20 Python
Python将一个Excel拆分为多个Excel
2018/11/07 Python
python爬虫selenium和phantomJs使用方法解析
2019/08/08 Python
使用python制作一个解压缩软件
2019/11/13 Python
学习python需要有编程基础吗
2020/06/02 Python
python 发送邮件的示例代码(Python2/3都可以直接使用)
2020/12/03 Python
加拿大最大的钻石商店:Peoples Jewellers
2018/01/01 全球购物
Notino法国:购买香水和化妆品
2019/04/15 全球购物
活动邀请函范文
2014/01/19 职场文书
教师竞聘上岗演讲稿
2014/09/03 职场文书
思想作风纪律整顿心得体会
2014/09/04 职场文书
向国旗敬礼学生寄语大全
2014/09/30 职场文书
一年级班主任工作总结2014
2014/11/08 职场文书