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

news2024/11/15 17:57:35

  大家好,我是不温卜火,昵称来源于成语—不温不火,本意是希望自己性情温和
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:46
  Mycsdn: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.content


def 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)
    
    # 处理name
    if 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.coloradmin.cn/o/1676923.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

string功能介绍(普及版)

目录 1。初始化(好几种方式),npos和string的使用说明 2。string的拷贝,隐式类型转换,[],size,iterator,begin,end,reverse,reverse_iterator&am…

【回溯】1240. 铺瓷砖

本文涉及知识点 回溯 LeetCode1240. 铺瓷砖 你是一位施工队的工长,根据设计师的要求准备为一套设计风格独特的房子进行室内装修。 房子的客厅大小为 n x m,为保持极简的风格,需要使用尽可能少的 正方形 瓷砖来铺盖地面。 假设正方形瓷砖的…

windows驱动开发-PCI和中断(二)

谈到中断使用PCI总线来作为例子是最合适的,在Windows发展过程中,PCI作为最成功的底层总线,集成了大量的外设,不夸张的说,目前PCI几乎是唯一的总线选择,故大部分情况下,只有PCI设备驱动程序会遇到…

前端 performance api使用 —— mark、measure计算vue3页面echarts渲染时间

文章目录 ⭐前言💖vue3系列文章 ⭐Performance api计算持续时间💖 mark用法💖 measure用法 ⭐计算echarts渲染的持续时间⭐结束 ⭐前言 大家好,我是yma16,本文分享关于 前端 performance api使用 —— mark、measure计…

java springboot连接sqlserver使用

pom.xml增加sqlserver驱动 <dependency><groupId>com.microsoft.sqlserver</groupId><artifactId>mssql-jdbc</artifactId><version>9.4.0.jre8</version></dependency>application.yml配置文件 server:port: 9001 #spring: …

多格式兼容的在线原型查看:Axure RP的便捷解决方案

Axure rp不仅可以绘制详细的产品构思&#xff0c;还可以在浏览器中生成html页面&#xff0c;但需要安装插件才能打开。安装Axure后 rpchrome插件后&#xff0c;还需要在扩展程序中选择“允许访问文件网站”&#xff0c;否则无法在Axure中成功选择 rp在线查看原型。听起来很麻烦…

用友GRP-U8 userInfoWeb SQL注入致RCE漏洞复现 (XVE-2024-10539)

0x01 产品简介 用友GRP-U8R10行政事业内控管理软件是用友公司专注于国家电子政务事业,基于云计算技术所推出的新一代产品,是我国行政事业财务领域最专业的政府财务管理软件。 0x02 漏洞概述 用友GRP-U8R10行政事业内控管理软件 userInfoWeb接口处存在SQL注入漏洞,未授权的…

不懂数字后端Box List、Polygon的意思?

什么是BOX&#xff1f; 景芯SoC做design planning的第一步就是确定floorplan的box&#xff0c;也就是设计的区域。这个区域可以划分为三个边界&#xff0c;如下图所示&#xff1a; Die Box 最外面一圈&#xff0c;我们称为 Die Box&#xff0c;也就是用来放置 IO 单元&#x…

高中数学:平面向量-加减运算

一、向量的加法运算 三角形法则&#xff08;推荐&#xff09; 两个或多个向量收尾相连的加法运算&#xff0c;用三角形法则 简便算法 首尾相连的多个向量&#xff0c;去掉中间点&#xff0c;就是最终的和。 也可以用三角形法则证明 向量加法交换律 向量加法结合律 平行四…

pycharm如何有效读取到win10设置的环境变量

参考链接&#xff1a; 参考文章 该参考文章的第一种方法&#xff1a;设置win10环境变量。 在设置完环境变量后&#xff0c;在pycharm终端上不能有效读取到刚刚设置的环境变量的&#xff0c;需要启动win的cmd&#xff0c;在项目路径下执行脚本。如下所示的对比&#xff1a; cm…

C++基础与深度解析 | 语句 | 分支语句 | 循环语句 | 达夫设备

文章目录 一、语句基础二、分支语句1.分支语句--if2.分支语句--switch 三、循环语句1.循环语句--while2.循环语句--do-while3.循环语句--for4.循环语句--基于范围的for循环5.break / continue语句四、语句的综合应用--达夫设备 一、语句基础 语句的常见类别&#xff1a; 表达…

数据结构与算法学习笔记三---栈和队列

目录 前言 一、栈 1.栈的表示和实现 1.栈的顺序存储表示和实现 1.C语言实现 2.C实现 2.栈的链式存储表示和实现 1.C语言实现 2.C实现 2.栈的应用 1.数制转换 二、队列 1.栈队列的表示和实现 1.顺序队列的表示和实现 2.链队列的表示和实现 2.循环队列 前言 这篇文…

OpenAI推出旗舰AI模型GPT-4o并免费开放

&#x1f989; AI新闻 &#x1f680; OpenAI推出旗舰AI模型GPT-4o并免费开放 摘要&#xff1a; OpenAI 未来的产品将以免费为优先&#xff0c;以让更多人使用为目标。OpenAI 发布了桌面版本的程序和更新后的 UI&#xff0c;更加简单自然。推出了新一代大模型 GPT-4o&#xf…

C语言 | Leetcode C语言题解之第89题格雷编码

题目&#xff1a; 题解&#xff1a; int* grayCode(int n, int* returnSize) {int ret_size 1 << n;int *ret (int *)malloc(ret_size * sizeof(int));for (int i 0; i < ret_size; i) {ret[i] (i >> 1) ^ i;}*returnSize ret_size;return ret; }

生态系统类型分布数据、土地利用数据、植被类型分布、自然保护区分布数据

引言 全国自然保护区生态系统类型分布信息产品是指基于Landsat TM数字影像&#xff08;以地形图纠正&#xff09;&#xff0c;采用全数字化人机交互遥感快速提取方法&#xff0c;建立全国自然保护区生态系统结构数据集&#xff0c;同时做成多种尺度的栅格数据&#xff0c;其中包…

Python | Leetcode Python题解之第90题子集II

题目&#xff1a; 题解&#xff1a; class Solution:def subsetsWithDup(self, nums: List[int]) -> List[List[int]]:if not nums:return list()results list()nums.sort()visited [False] * len(nums)self.dfs(nums, results, list(), visited, 0)return resultsdef df…

2024 National Invitational of CCPC (Zhengzhou)(CCPC郑州邀请赛暨CCPC河南省赛)

2024 National Invitational of CCPC (Zhengzhou) 2024CCPC郑州邀请赛暨CCPC河南省赛 2024 National Invitational of CCPC (Zhengzhou) B. 扫雷 1 题意&#xff1a;扫n轮雷&#xff0c;每轮开始获得一枚扫雷币&#xff0c;可保存&#xff0c;从第一轮开始&#xff0c;可以…

如何管理多个版本的Node.js

我们如何在本地管理多个版本的Node.js&#xff0c;有没有那种不需要重新安装软件再修改配置文件和环境变量的方法&#xff1f;经过我的查找&#xff0c;还真有这种方式&#xff0c;那就是nvm&#xff08;Node Version Manager&#xff09;。 下面我就给大家介绍下NVM的使用 1…

MSR810-LM快速配置通过LTE模块上网

正文共&#xff1a;1111 字 13 图&#xff0c;预估阅读时间&#xff1a;1 分钟 之前买了一个无线版本的MSR810-W&#xff08;淘了一台二手的H3C企业路由器&#xff0c;就用它来打开网络世界的大门&#xff09;&#xff0c;并整理了一份快速配置&#xff08;脚本案例来了&#x…

AI大事记(持续更新)

文章目录 前言 一、人工智能AI 1.基本概念 2.相关领域 2.1基础设施 2.2大模型 2.3大模型应用 二、大事记 2024年 2024-05-14 GPT-4o发布 2024-02-15 Sora发布 2023年 2023-03-14 GPT-4.0发布 2022年 2022-11-30 ChatGPT发布 总结 前言 2022年11月30日openai的…