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中字典和JSON互转操作实例
Jan 19 Python
Python3遍历目录树实现方法
May 22 Python
python 读写、创建 文件的方法(必看)
Sep 12 Python
python实现八大排序算法(1)
Sep 14 Python
详解supervisor使用教程
Nov 21 Python
Django 实现图片上传和显示过程详解
Jul 18 Python
Python批量将图片灰度化的实现代码
Apr 11 Python
python pymysql链接数据库查询结果转为Dataframe实例
Jun 05 Python
在keras里面实现计算f1-score的代码
Jun 15 Python
Python中的None与 NULL(即空字符)的区别详解
Sep 24 Python
python 爬取百度文库并下载(免费文章限定)
Dec 04 Python
总结几个非常实用的Python库
Jun 26 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/02/06 PHP
解析PHP中的内存管理,PHP动态分配和释放内存
2013/06/28 PHP
[原创]php简单防盗链验证实现方法
2016/07/09 PHP
php封装的mysqli类完整实例
2016/10/18 PHP
用javascript实现兼容IE7的类库 IE7_0_9.zip提供下载
2007/08/08 Javascript
通过JS自动隐藏手机浏览器的地址栏实现原理与代码
2013/01/02 Javascript
JavaScript实现重置表单(reset)的方法
2015/04/02 Javascript
深入浅析NodeJs并发异步的回调处理
2015/12/21 NodeJs
详解JavaScript数组和字符串中去除重复值的方法
2016/03/07 Javascript
微信小程序  生命周期详解
2016/10/27 Javascript
获取当前月(季度/年)的最后一天(set相关操作及应用)
2016/12/27 Javascript
非常优秀的JS图片轮播插件Swiper的用法
2017/01/03 Javascript
laravel5.4+vue+element简单搭建的示例代码
2017/08/29 Javascript
Vue异步加载about组件
2017/10/31 Javascript
Angular搜索场景中使用rxjs的操作符处理思路
2018/05/30 Javascript
JS实现的图片选择顺序切换和循环切换功能示例【测试可用】
2018/12/28 Javascript
爬虫利器Puppeteer实战
2019/01/09 Javascript
Angular7创建项目、组件、服务以及服务的使用
2019/02/19 Javascript
vue使用lodop打印控件实现浏览器兼容打印的方法
2021/02/07 Vue.js
python基础教程之数字处理(math)模块详解
2014/03/25 Python
python 实现判断ip连通性的方法总结
2018/04/22 Python
pytorch对可变长度序列的处理方法详解
2018/12/08 Python
Python使用ctypes调用C/C++的方法
2019/01/29 Python
Python generator生成器和yield表达式详解
2019/08/08 Python
Python Django 命名空间模式的实现
2019/08/09 Python
python设置环境变量的作用整理
2020/02/17 Python
css3实现3D色子翻转特效
2014/12/23 HTML / CSS
关于 HTML5 的七个传说小结
2012/04/12 HTML / CSS
实习教师自我鉴定
2013/09/27 职场文书
施工安全协议书
2013/12/11 职场文书
优秀体育委员自荐书
2014/01/31 职场文书
小区门卫岗位职责范本
2014/08/24 职场文书
2014年电厂个人工作总结
2014/11/27 职场文书
新员工辞职信范文
2015/05/12 职场文书
使用qt quick-ListView仿微信好友列表和聊天列表的示例代码
2021/06/13 Python
讨论nginx location 顺序问题
2022/05/30 Servers