爬虫入门经典(七) | 采集淘宝电场相关信息

  大家好,我是不温卜火,昵称来源于成语—不温不火,本意是希望自己性情温和
1

PS:由于现在越来越多的人未经本人同意直接爬取博主本人文章,博主在此特别声明:未经本人允许,禁止转载!!!

目录

  • 一、网页分析
  • 二、内容解析
  • 三、完整代码
  • 四、运行结果


一、网页分析

在前几篇文章中,虽然已经有过用正则表达式解析数据的案例,但是个人感觉干货不够!所以,本次博主诚意满满的再次带来一篇博文~
3
下面博主先给出要爬取网页的网址:https://www.taobao.com/markets/3c/tbdc?spm=a217h.9580640.831011.1.1aa525aaKXwn5M

打开网页之后,我们可以看到网页是这样的:
4
看到网页之后,下面我们就需要开始分析网页结构,首先,先通过打开开发者选项,查看网页结构。我们通过查看发现,此网页是静态网页,看到此结构的第一时间,博主先使用了xpath进行解析。
5
通过解析,博主发现是可行的。但是!既然说了,使用正则进行解析,怎么能为了偷懒就换用xpath呢?所以博主毅然的放弃了xpath。
6
但是如果使用正则的话,我们会发现, 我们需要找其他的URL。但是我们通过查看传统的NetWork无法找到我们需要的URL。

在这种时候我们可以通过开发者工具中的Sreach查找关键字:
7
我们看到网页中有关键字,如荣耀 畅玩7。我们以此为突破口,进行问题的切入
8
通过上图,我们可以知道此部分就是咱们要找的URL,这个时候我们只需点击Headers 就可以看到我们需要的URL
9
我们看到此网页共有七个模块,所以我们需要找到7个URL, 由于找其他URL的过程和举例是一样的,博主在此只给出URL。
10

url1 = "https://drc.alicdn.com/7/1870316_2____?callback=jsonp1870316_2____"
url2 = "https://drc.alicdn.com/7/1870321_2____?callback=jsonp1870321_2____"
url3 = "https://drc.alicdn.com/7/1870333_2____?callback=jsonp1870333_2____"
url4 = "https://drc.alicdn.com/7/1870340_2____?callback=jsonp1870340_2____"
url5 = "https://drc.alicdn.com/7/1870341_2____?callback=jsonp1870341_2____"
url6 = "https://drc.alicdn.com/7/1870342_2____?callback=jsonp1870342_2____"
url7 = "https://drc.alicdn.com/7/1870343_2____?callback=jsonp1870343_2____"

二、内容解析

需要的网址已经搞到了,下面当然是要解析网页了:
11
根据上图,我们可以看到价格、图片、标题、链接。

通过观察,我们发现是有规律的,我们只需(.*?)即可获取我们所需要的内容。 代码如下

# 获取数据
title_list = re.findall(r'"item_title":"(.*?)"', content)
price_list = re.findall(r'"item_current_price":"(.*?)"', content)
pic_list = re.findall(r'"item_pic":"(.*?)"', content)
url_list = re.findall(r'"item_url":"(.*?)"', content)

获取之后,别忘了使用zip()压缩一下数据

# 压缩数据
data_zip = zip(title_list, price_list, pic_list, url_list)
# 循环
for data in data_zip:items.append(data)

最后,我们可以看到输出的格式如下图:
12
你以为这样就完了嘛!
13
我们现在只是获取了基本信息。在网页解析中,我们可以看到item_pic内有图片链接,我们可以打开看是不是我们想要保存的图片
14
复制到空白处,我们看下这个链接

http://gw.alicdn.com/bao/uploaded/i4/840091576/O1CN018aiCuF1NVqjqpMNB4_!!840091576.jpg

通过观察,我们可以看到需要添加http:

完整代码如下:

# 拼接成完整URL
content = parse_url("http:" + url)
print(content)

15

三、完整代码

# encoding: utf-8
'''@author 李华鑫@create 2020-10-07 14:46Mycsdn:https://buwenbuhuo.blog.csdn.net/@contact: 459804692@qq.com@software: Pycharm@file: 淘宝商品信息.py@Version:1.0'''
import requests
import time
import random
import re
import csv
import os"""
https://s.taobao.com/search?q=%E5%8D%8E%E4%B8%BA&imgfile=&commend=all&ssid=s5-e&search_type=item&sourceId=tb.index&spm=a21bo.2017.201856-taobao-item.1&ie=utf8&initiative_id=tbindexz_20170306&bcoffset=6&ntoffset=6&p4ppushleft=1%2C48&s=0
"""url1 = "https://drc.alicdn.com/7/1870316_2____?callback=jsonp1870316_2____"
url2 = "https://drc.alicdn.com/7/1870321_2____?callback=jsonp1870321_2____"
url3 = "https://drc.alicdn.com/7/1870333_2____?callback=jsonp1870333_2____"
url4 = "https://drc.alicdn.com/7/1870340_2____?callback=jsonp1870340_2____"
url5 = "https://drc.alicdn.com/7/1870341_2____?callback=jsonp1870341_2____"
url6 = "https://drc.alicdn.com/7/1870342_2____?callback=jsonp1870342_2____"
url7 = "https://drc.alicdn.com/7/1870343_2____?callback=jsonp1870343_2____"urls = [url1, url2,url3,url4,url5,url6,url7]headers = {"user-agent": "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36",
}items = []def parse_url(url):"""解析url,得到响应内容"""time.sleep(random.random() * 3)response = requests.get(url=url, headers=headers)return response.contentdef parse_content(content):"""解析响应内容,返回数据"""# 获取数据title_list = re.findall(r'"item_title":"(.*?)"', content)price_list = re.findall(r'"item_current_price":"(.*?)"', content)pic_list = re.findall(r'"item_pic":"(.*?)"', content)url_list = re.findall(r'"item_url":"(.*?)"', content)# 压缩数据data_zip = zip(title_list, price_list, pic_list, url_list)# 循环for data in data_zip:items.append(data)def save():"""保存数据"""with open("./files/淘宝/淘宝.csv", "a", encoding="utf-8") as file:writer = csv.writer(file)for item in items:writer.writerow(item)save_img(item[2], item[0])def save_img(url, title):"""保存图片"""# 获取字节content = parse_url("http:" + url)# 处理nameif title.rfind("/") != -1:title = title.split("/")[-1]name = title + os.path.splitext(url)[-1]# 文件写with open("./files/淘宝/img/{}".format(name), "wb") as file:file.write(content)def start():"""开始爬虫"""if not os.path.exists("./files/淘宝/img"):os.makedirs("./files/淘宝/img")for url in urls:print(url)content = parse_url(url).decode("utf-8")parse_content(content)save()if __name__ == '__main__':start()

四、运行结果

16
21

17

美好的日子总是短暂的,虽然还想继续与大家畅谈,但是本篇博文到此已经结束了,如果还嫌不够过瘾,不用担心,我们下篇见!


18

  好书不厌读百回,熟读课思子自知。而我想要成为全场最靓的仔,就必须坚持通过学习来获取更多知识,用知识改变命运,用博客见证成长,用行动证明我在努力。
  如果我的博客对你有帮助、如果你喜欢我的博客内容,请“点赞” “评论”“收藏”一键三连哦!听说点赞的人运气不会太差,每一天都会元气满满呦!如果实在要白嫖的话,那祝你开心每一天,欢迎常来我博客看看。
  码字不易,大家的支持就是我坚持下去的动力。点赞后不要忘了关注我哦!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/328769.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Leetcode每日一题】 动态规划 - 简单多状态 dp 问题 - 删除并获得点数(难度⭐⭐)(76)

1. 题目解析 题目链接:LCR 091. 粉刷房子 这个问题的理解其实相当简单,只需看一下示例,基本就能明白其含义了。 2.算法原理 1. 状态定义 在解决这类问题时,我们首先需要根据题目的具体要求来定义状态。针对房屋粉刷问题&#…

C语言 | Leetcode C语言题解之第85题最大矩形

题目&#xff1a; 题解&#xff1a; int maximalRectangle(char** matrix, int matrixSize, int* matrixColSize) {int m matrixSize;if (m 0) {return 0;}int n matrixColSize[0];int left[m][n];memset(left, 0, sizeof(left));for (int i 0; i < m; i) {for (int j …

AI图书推荐:ChatGPT 和Power BI驱动未来金融投资变革

《ChatGPT 和Power BI驱动未来金融变革》&#xff08;The Future of Finance with ChatGPT and Power BI&#xff09;由James Bryant和Aloke Mukherjee撰写&#xff0c;探讨了ChatGPT和Power BI在金融领域的应用。 主要特点&#xff1a; - 使用ChatGPT自动化Power BI&#xff…

01 | 为什么需要消息队列?

哪些问题适合使用消息队列来解决&#xff1f; 1. 异步处理 2. 流量控制 使用消息队列隔离网关和后端服务&#xff0c;以达到流量控制和保护后端服务的目的。 3. 服务解耦 无论增加、减少下游系统或是下游系统需求如何变化&#xff0c;订单服务都无需做任何更改&#xff0c…

Linux上编译安装和卸载软件

在maven官网下载maven时候&#xff0c;看到maven-3.9.5这个版本有2份安装包&#xff0c;一个是binaries&#xff0c;一个是source binaries是已编译好的文件&#xff0c;可以直接使用的版本&#xff1b;source是源代码版本&#xff0c;需要自己编译 源码的安装一般由这三个步…

Python函数之旅专栏(导航)

Python内置函数(参考版本:3.11.8)AELRabs( )enumerate( )len( )range( )aiter( )eval( )list( )repr( )all( )exec( )locals( )reversed( )anext( )round( )any( ) ascii( )FM  filter( )map( )S float( )max( )set( )Bformat( )memoryview( )setattr( )bin( )frozenset( )…

Foxmail使用经验总结

目录 1.概述 2.版本历史 3.使用方法 3.1.安装和设置账户 3.2.收取和阅读邮件 ​​​​​​​3.3.发送邮件 ​​​​​​​3.4.管理联系人 ​​​​​​​3.5.日程安排和任务管理 ​​​​​​​3.6.定制设置和插件 ​​​​​​​3.7.跨平台同步 4.小结 1.概述 Fox…

QT:QML制作线形图

目录 一.介绍 二.引入库 三.自定义属性 四.悬停处理函数 五.设置X轴 六.设置Y轴 七.画线 八.测试点坐标 九.设置值 十.效果演示 十一.代码演示 1.LineGraph.qml 2.main.qml 一.介绍 线形图&#xff08;也称为折线图&#xff09;是一种常用的数据可视化工具&#…

Springboot开发 -- Postman 调试 session 验证 接口

当我们在开发Spring Boot应用时&#xff0c;经常会遇到带有Session验证的接口&#xff0c;这些接口需要用户先登录并获取到Session ID&#xff08;或称为cookie中的JSESSIONID&#xff09;&#xff0c;然后在后续的请求中携带这个Session ID来保持会话状态。下面我将以一个实际…

Java 插入数据到Elasticsearch中进行各种类型文档的内容检索

源码下载&#xff1a;链接&#xff1a;https://pan.baidu.com/s/1D3yszkTzjwQz0vFRozQl2g?pwdz6kb 提取码&#xff1a;z6kb 实现思路 1.搭建一个新的springboot项目&#xff0c;不会的请看我这篇博客&#xff1a;springboot项目搭建 2.添加maven依赖 <dependency><…

信息系统项目管理师0602:项目立项管理 — 历年考题(详细分析与讲解)

点击查看专栏目录 1、2017年11月第31题 题干: 项目经理小李依据当前技术发展趋势和所掌握的技术能否支撑该项目的开发,进行可行性研究。小李进行的可行性研究属于( )。 选项: A. 经济可行性分析 B. 技术可行性分析 C. 运行环境可行性分析 D. 其他方面的可行性分析 答案…

远程桌面如何配置?使用快解析远程访问

远程桌面如何设置&#xff1f; 远程桌面作为windows系统内置的一个组件&#xff0c;多年来深受用户喜爱。使用此功能&#xff0c;我们能够轻而易举的控制我们想要控制的电脑。下面我就简单的介绍一下远程桌面的设置方法。 在讲具体设置方法之前&#xff0c;首先应该给大家普及…

6大部分,20 个机器学习算法全面汇总!!建议收藏!(上篇)

前两天有小伙伴说想要把常见算法的原理 公式汇集起来。 这样非常非常方便查看&#xff01;分为上下两篇&#xff0c;下篇地址&#xff1a; 本次文章分别从下面6个方面&#xff0c;涉及到20个算法知识点&#xff1a; 监督学习算法 无监督学习算法 半监督学习算法 强化学习…

PingCAP 黄东旭参与 CCF 秀湖会议,共探开源教育未来

日前&#xff0c;第十二期 CCF 秀湖会议在苏州 CCF 业务总部 & 学术交流中心成功举办。本次会议以“开源教育&#xff1a;使命、挑战与发展”为主题&#xff0c;汇聚了来自学术界、工业界的二十余位专家&#xff0c;共同探讨开源教育的现状与未来。 PingCAP 联合创始人兼 C…

【微信小程序开发(从零到一)【婚礼邀请函】制作】——邀请函界面的制作(2)

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;开发者-曼亿点 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 曼亿点 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a…

QT多线程的使用

目录 一.介绍 二.第一种多线程方式 1.创建一个线程子类&#xff0c;继承QT中的QThread 2.重新父类的run( )方法 3.在线程中创建子线程对象 4.run( )方法 5.启动子线程 三.第二种多线程方式 1.创建一个新类&#xff08;这个类是QObject的派生&#xff09; 2.在这个类中…

Unity射击游戏开发教程:(18)添加弹药计数+补充弹药

添加简单的弹药计数 我将讨论如何向游戏中添加简单的弹药计数。这将包括在 HUD 中添加弹药计数器,当弹药达到 0 时,文本会将颜色更改为红色以提醒玩家。另外,当弹药数为0时,玩家将无法再射击。让我们深入了解吧! 在播放器脚本中我们需要添加一些变量。我们将创建两个公共整…

Linux 安裝 rpm包

下载 地址&#xff1a;https://developer.aliyun.com/packageSearch 安装 rpm -ivh lsof-4.87-6.el7.x86_64.rpmlsof -Ki|awk {print $2}|sort|uniq -c|sort -nr|head lsof | wc -l

《天空之城》观后感

曾经很长一段时间都着迷于《天空之城》这段旋律&#xff0c;一遍一遍不厌其烦地听&#xff0c;静谧而温馨、豪迈却苍凉&#xff0c;各种复杂的感受随着起伏的音符流淌进心里。多年之后才知道这首曲子出自宫崎骏的同名动画电影。说来也有意思&#xff0c;似乎大多数人是通过电影…

python批量生成防伪识别二维码

欢迎关注我👆,收藏下次不迷路┗|`O′|┛ 嗷~~ 目录 一.前言 二.代码 三.使用 四.总结 一.前言 二维码(QR Code)是一种矩阵条码技术,它使用黑白矩形图案来表示二进制数据,这些矩形图案可以被设备扫描并解读。二维码可以被用来存储