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处理文本文件并生成指定格式的文件
Jul 31 Python
介绍Python的Urllib库的一些高级用法
Apr 30 Python
使用Python脚本将Bing的每日图片作为桌面的教程
May 04 Python
python自定义类并使用的方法
May 07 Python
Python多进程分块读取超大文件的方法
Apr 13 Python
使用python 爬虫抓站的一些技巧总结
Jan 10 Python
Python打包方法Pyinstaller的使用
Oct 09 Python
python pygame实现滚动横版射击游戏城市之战
Nov 25 Python
在python中做正态性检验示例
Dec 09 Python
pytorch中使用cuda扩展的实现示例
Feb 12 Python
Python实现链表反转的方法分析【迭代法与递归法】
Feb 22 Python
Python性能分析工具py-spy原理用法解析
Jul 27 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中上传大体积文件时需要的设置
2006/10/09 PHP
php IP转换整形(ip2long)的详解
2013/06/06 PHP
PHP移动文件指针ftell()、fseek()、rewind()函数总结
2014/11/18 PHP
Yii2 队列 shmilyzxt/yii2-queue 简单概述
2017/08/02 PHP
php无限级分类实现评论及回复功能
2019/02/18 PHP
ASP中进行HTML数据及JS数据编码函数
2009/11/11 Javascript
div移动 输入框不能输入的问题
2009/11/19 Javascript
用于节点操作的API,颠覆原生操作HTML DOM节点的API
2010/12/11 Javascript
Js实现双击鼠标自动滚动屏幕的示例代码
2013/12/14 Javascript
JavaScript实现大数的运算
2014/11/24 Javascript
jQuery中Form相关知识汇总
2015/01/06 Javascript
js检测用户输入密码强度
2015/10/22 Javascript
基于jquery编写分页插件
2016/03/07 Javascript
JavaScript代码实现图片循环滚动效果
2020/03/19 Javascript
AngularJS入门教程之数据绑定用法示例
2016/11/01 Javascript
Vue数据驱动模拟实现5
2017/01/13 Javascript
单行 JS 实现移动端金钱格式的输入规则
2017/05/22 Javascript
详解react-webpack2-热模块替换[HMR]
2017/08/03 Javascript
Node.js assert断言原理与用法分析
2019/01/04 Javascript
详解Bootstrap 学习(一)入门
2019/04/12 Javascript
javascript实现对话框功能警告(alert 消息对话框)确认(confirm 消息对话框)
2019/05/07 Javascript
微信小程序8种数据通信的方式小结
2020/02/03 Javascript
详解JavaScript 的执行机制
2020/09/18 Javascript
Python中设置变量作为默认值时容易遇到的错误
2015/04/03 Python
python3实现UDP协议的服务器和客户端
2017/06/14 Python
1 行 Python 代码快速实现 FTP 服务器
2018/01/25 Python
分享一下Python数据分析常用的8款工具
2018/04/29 Python
Python 基于wxpy库实现微信添加好友功能(简洁)
2019/11/29 Python
python开发前景如何
2020/06/11 Python
html5适合移动应用开发的12大特性
2014/03/19 HTML / CSS
2014年班主任自我评价范文
2014/04/23 职场文书
七夕情人节促销方案
2014/06/07 职场文书
困难补助申请报告
2015/05/19 职场文书
CSS实现渐变色边框(Gradient borders)的5种方法
2022/03/25 HTML / CSS
SQL Server一个字符串拆分多行显示或者多行数据合并成一个字符串
2022/05/25 SQL Server
深入理解pytorch库的dockerfile
2022/06/10 Python