python带你采集淘/苏/唯/考四大电商平台商品数据

news2024/11/16 17:42:22

前言

嗨喽,大家好呀~这里是爱看美女的茜茜呐

又到了学Python时刻~


环境介绍:

  • python 3.8 越稳定越好

  • pycharm 2021专业版


一、苏宁

、

模块使用:

  • selenium >>> pip install selenium

    3.141.0 Python当中的模块 操作 浏览器的驱动

  • Chrome浏览器

  • Chromedriver

    浏览器驱动 操作浏览器 让 浏览器帮助我们去执行一些操作

思路:

日常如何打开浏览器查看商品的

代码就如何编写

  1. 用selenium打开一个谷歌浏览器

  2. 用谷歌浏览器 打开网站

  3. 提取商品信息 滚动

代码展示

导入模块

from selenium import webdriver      # 第三方模块 3.141.0   pip install selenium==3.141.0  pip uninstall selenium
import time
import csv

PS:完整源码如有需要的小伙伴可以加下方的群去找管理员免费领取

mode='a': 追加写入数据

encoding='utf-8': 编码方式 excel打开可能会出现中文乱码 换个软件打开 wps 或者换一个编码方式 gbk

newline='': 数据空行

f = open('suning.csv', mode='a', encoding='utf-8', newline='')
csv_writer = csv.writer(f)

写入表头

csv_writer.writerow(['title', 'price', 'comment', 'store', 'detail_url'])

执行页面滚动的操作

def drop_down():
    for x in range(1, 12, 2):
        time.sleep(1)
        j = x / 9
        js = 'document.documentElement.scrollTop = document.documentElement.scrollHeight * %f' % j
        driver.execute_script(js)
def get_next():
    divs = driver.find_elements_by_css_selector('.product-box')

针对divs: 所有的商品信息, 进行二次提取

针对每个商品==div

价格 + 名称 + 评论

.text: 提取标签 文本内容

.get_attribute('href'): 提取标签的属性内容

< a class=‘’ href=‘’ sa-data=‘’>

    for div in divs:
        price = div.find_element_by_css_selector('.def-price').text
        title = div.find_element_by_css_selector('.title-selling-point').text
        comment = div.find_element_by_css_selector('.info-evaluate').text
        store = div.find_element_by_css_selector('.store-stock').text
        detail_url = div.find_element_by_css_selector('.title-selling-point a').get_attribute('href')
        print(title, price, comment, store, detail_url)
        csv_writer.writerow([title, price, comment, store, detail_url])

chromedriver.exe 放到 python.exe 同级目录下

谷歌浏览器(正版的) + 谷歌驱动(操作浏览器的一个程序 版本号)

1.用selenium打开一个谷歌浏览器

driver = webdriver.Chrome()
for page in range(0, 50):

2.用谷歌浏览器 打开网站

3.下拉页面

    drop_down()

4.提取数据 代码方式提取

    get_next()

PS:完整源码如有需要的小伙伴可以加下方的群去找管理员免费领取

二、淘

模块使用:

  • requests 模块

代码展示

导入模块

import requests     # 发送请求 第三方模块
import re
import json
import csv
with open('淘宝.csv', encoding='utf-8', mode='a', newline='') as f:
    csv_writer = csv.writer(f)
    csv_writer.writerow(['raw_title', 'view_price', 'item_loc', 'view_sales', 'comment_count', 'nick', 'detail_url'])

伪装

  1. 发送请求
    response = requests.get(url=url, headers=headers)
  1. 获取数据
    html_data = response.text
  1. 解析数据
    json_str = re.findall('g_page_config = (.*);', html_data)[0]
    json_dict = json.loads(json_str)

字典 键值对取值

    auctions = json_dict['mods']['itemlist']['data']['auctions']
    for auction in auctions:
        # auction代表每一个商品
        raw_title = auction['raw_title']
        view_price = auction['view_price']
        item_loc = auction['item_loc']
        try:
            view_sales = auction['view_sales']      # 销量
        except:
            view_sales = 0
        comment_count = auction['comment_count']
        nick = auction['nick']
        detail_url = auction['detail_url']
        print(raw_title, view_price, item_loc, view_sales, comment_count, nick, detail_url)
  1. 保存数据
        with open('淘宝.csv', encoding='utf-8', mode='a', newline='') as f:
            csv_writer = csv.writer(f)
            csv_writer.writerow([raw_title, view_price, item_loc, view_sales, comment_count, nick, detail_url])

三、考拉

模块使用:

  • requests >>> pip install requests

  • parsel >>> pip install parsel

代码展示

导入模块

# import 导入模块
import requests     # 第三方模块 额外安装 内置: 不需要你额外安装
import parsel       # 第三方模块 专门用来html标签数据
import csv          # 表格 内置模块
with open('考拉海购.csv', mode='a', encoding='utf-8', newline='') as f:
    csv_writer = csv.writer(f)
    csv_writer.writerow(['title', 'price', 'comments', 'address', 'selfflag', 'img_url', 'href'])
# 字典

1. 发送请求

    response = requests.get(url=url, headers=headers)

<Response [200]>: 请求成功

2. 获取数据

    html_data = response.text

3. 解析数据

html css javascript(JS) 前端网页制作三剑客

html(html源代码): 展示数据内容的

css: 页面变得更加美观的

js: 页面设计的有动态效果的

    select = parsel.Selector(html_data)
    goods = select.css('.goodswrap.promotion')
    for good in goods:

详情页链接

        href = good.css('.title::attr(href)').get()

图片链接

        img_url = good.css('.imgtag::attr(src)').get()

价格

        price = good.css('.bigPrice::text').get()

标题

        title = good.css('h2::text').get()
        title = title.replace('\n', '')

评论数

        comments = good.css('.comments::text').get()

地址

        address = good.css('.proPlace.ellipsis::text').get()

商铺名称

        selfflag = good.css('.selfflag span::text').get()
        if selfflag == "" or selfflag == None:
            selfflag = good.css('.selfflag a::text').get()
        print(title, price, comments, address, selfflag, img_url, href)

文件名称

写入方式 追加写入

编码

        with open('考拉海购.csv', mode='a', encoding='utf-8', newline='') as f:
            csv_writer = csv.writer(f)
            csv_writer.writerow([title, price, comments, address, selfflag, img_url, href])

PS:完整源码如有需要的小伙伴可以加下方的群去找管理员免费领取

四、唯

模块使用:

  • requests —> pip install requests

  • csv 内置模块 不需要安装

数据来源分析:

  1. 明确需求: 明确采集数据内容是什么

    • 采集口红商品数据
  2. 通过浏览器自带工具:

    开发者工具, 进行抓包分析 <无论采集那个网站什么数据, 都要抓包分析一下数据来源>

    • 打开开发者工具: F12 或者 鼠标右键点击检查选择 network <网络面板>

    • 刷新网页: 让本网页数据内容, 重新加载一遍

    • 通过搜索功能, 去查询找到, 商品所对应url地址<数据包>

    唯品会商品数据结构:

    整页商品一共是120条数据内容, 分成三组: 前50, 中50, 后20 —> 对应就有三个url地址

    分析这三个url地址, 请求参数变化 —> 改变商品ID —> 分析商品ID在什么地方可以一次性获得到

    想要获取商品数据信息 —> 请求三个链接, 把商品ID切片分成三组 —> 商品ID

代码展示

# 导入数据请求模块
import requests
# 导入格式化输出模块
from pprint import pprint
# 导入csv模块
import csv

f = open('口红_1.csv', mode='a', encoding='utf-8', newline='')
csv_writer = csv.DictWriter(f, fieldnames=[
    '标题',
    '品牌',
    '售价',
    '原价',
    '折扣',
    '色系',
    '妆感',
    '类型',
    '是否套装',
    '商品属性',
    '详情页',
])
csv_writer.writeheader()


def Shop(shop_id):

    shop_data = {
        'app_name': 'shop_pc',
        'app_version': '4.0',
        'warehouse': 'VIP_HZ',
        'fdc_area_id': '104103101',
        'client': 'pc',
        'mobile_platform': '1',
        'province_id': '104103',
        'user_id': '',
        'mars_cid': '1655447722495_62c422a2b0d263186b2d64412108655f',
        'wap_consumer': 'a',
        'productIds': shop_id,
        'scene': 'search',
        'standby_id': 'nature',
        'extParams': '{"stdSizeVids":"","preheatTipsVer":"3","couponVer":"v2","exclusivePrice":"1","iconSpec":"2x","ic2label":1,"superHot":1,"bigBrand":"1"}',
        'context': '',
        '_': '1669032748487',
    }
    json_data = requests.get(url=link, params=shop_data, headers=headers).json()
    for index in json_data['data']['products']:

            attrs = ','.join([attr['name'] + ':' + attr['value'] for attr in index['attrs']])
            # 色系:红调,妆感:哑光,类型:唇釉,是否套装:是
            colour = index['attrs'][0]['value']  # 色系
            feel = index['attrs'][1]['value']  # 妆感
            kid = index['attrs'][2]['value']  # 类型
            Tao = index['attrs'][-1]['value']  # 是否套装
            dit = {
                '标题': index['title'],
                '品牌': index['brandShowName'],
                '售价': index['price']['salePrice'],
                '原价': index['price']['marketPrice'],
                '折扣': index['price']['mixPriceLabel'],
                '色系': colour,
                '妆感': feel,
                '类型': kid,
                '是否套装': Tao,
                '商品属性': attrs,
                '详情页': shop_url,
            }
            print(dit)
            csv_writer.writerow(dit)
        except:
            pass
for page in range(0, 1200, 120):

    data = {
        # 'callback': 'getMerchandiseIds',
        'app_name': 'shop_pc',
        'app_version': '4.0',
        'warehouse': 'VIP_HZ',
        'fdc_area_id': '104103101',
        'client': 'pc',
        'mobile_platform': '1',
        'province_id': '104103',
        'user_id': '',
        'mars_cid': '1655447722495_62c422a2b0d263186b2d64412108655f',
        'wap_consumer': 'a',
        'standby_id': 'nature',
        'keyword': '口红',
        'lv3CatIds': '',
        'lv2CatIds': '',
        'lv1CatIds': '',
        'brandStoreSns': '',
        'props': '',
        'priceMin': '',
        'priceMax': '',
        'vipService': '',
        'sort': '0',
        'pageOffset': '0',
        'channelId': '1',
        'gPlatform': 'PC',
        'batchSize': '120',
        '_': '1669032748485',
    }

    response = requests.get(url=url, params=data, headers=headers)
    products = [i['pid'] for i in response.json()['data']['products']]
    product_id_1 = ','.join(products[:50])  # 0-49 顾头不顾尾  把列表合并为字符串  str.join(list)
    product_id_2 = ','.join(products[50:100])  # 50-99 顾头不顾尾
    product_id_3 = ','.join(products[100:])  # 100-最后 顾头不顾尾
    Shop(shop_id=product_id_1)
    Shop(shop_id=product_id_2)
    Shop(shop_id=product_id_3)

尾语

感谢你观看我的文章呐~本次航班到这里就结束啦 🛬

希望本篇文章有对你带来帮助 🎉,有学习到一点知识~

躲起来的星星🍥也在努力发光,你也要努力加油(让我们一起努力叭)。

最后,宣传一下呀~👇👇👇更多源码、资料、素材、解答、交流皆点击下方名片获取呀👇👇👇

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

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

相关文章

2023北京国际残疾人用品展览会|福祉博览会

全 称&#xff1a;2023中国国际福祉博览会暨中国国际康复博览会 英 文&#xff1a;Care & Rehabilitation Expo China 2023 时 间&#xff1a;2023年5月21-23日 地 点&#xff1a;北京首钢会展中心&#xff08;1-3号馆&#xff09; 主 办&#xff1a;中国残疾人联合会 承 办…

visdrone数据集转化为MOT数据集(用作MOTR模型训练)

文章目录visdrone数据集转化为MOT数据集MOT17 数据集格式traindet.txtgt.txtseqinfo.initestdet.txtvisdrone——Task 4_ Multi-Object Tracking配置seqinfo.ini文件代码如下Linuxvisdrone数据集转化为MOT数据集 MOT17 数据集格式 ├── MOT17 │ ├── images │ ├─…

YOLO学习记录之模型修改

我们在做实验时&#xff0c;不免需要对模型结构进行修改来检测自己的改进性能&#xff0c;对于一般模型而言&#xff0c;我们只需要简单的在代码中添加网络层即可&#xff0c;但对于一些预训练好的模型&#xff0c;我们则需要进行较为复杂的修改。以我们的YOLOV7模型为例&#…

[Linux]----守护进程

文章目录前言一、什么是守护进程?二、会话和进程组会话进程组三、守护进程的编程流程总结前言 这节课我来给大家讲解在Linux下如何让进程守护化,运行在后台,处理我们的任务. 正文开始! 一、什么是守护进程? 守护进程也称为精灵进程(Daemon),是运行在后台的一种特殊进程.它…

Mybatis-Plus快速使用相关知识点1

Mybatis-Plus的mapper、service 基本CURD BaseMapper BaseMapper是MyBatis-Plus提供的模板mapper&#xff0c;其中包含了基本的CRUD方法&#xff0c;泛型为操作的实体类型&#xff0c;Mapper 继承该接口后&#xff0c;无需编写 mapper.xml 文件&#xff0c;即可获得CRUD功能…

JavaScript刷LeetCode拿offer-链表篇

一、链表 链表&#xff08;Linked List&#xff09;是一种常见的基础数据结构&#xff0c;也是线性表的一种。 一个线性表是 n 个具有相同特性的数据元素的有限序列&#xff0c;线性表的存储结构分为两类&#xff1a;顺序表&#xff08;数组&#xff09;和链表。 链表相比较顺…

站得高,望得远

1、站得高&#xff0c;望的远 计算机科学领域的任何问题都可以通过增加一个间接的中间层来解决。 这句话几乎概括了计算机系统软件体系结构的设计要点 &#xff0c;整个体系结构从上到下都是按照严格的层次结构设计的。不仅是计算机系统软件整个体系是这样的&#xff0c;体系里…

884. 两句话中的不常见单词 map与stringstream

目录 力扣884. 两句话中的不常见单词 【解法一】&#xff1a;最后写出了一坨屎&#xff0c;虽然它是一坨屎&#xff0c;但是它能动&#xff0c;虽然它是一坨屎&#xff0c;但起码这是我自己拉的 【大佬解法】 stringstream的使用 以及 map的使用 884. 两句话中的不常见单词 句…

python实现bib文件中参考文献的题目每个单词首字母大写

文章目录前言实现思路前言 由于毕业论文格式要求英文参考文献的题目的每个单词&#xff08;除了介词&#xff09;的首字母都要大写&#xff0c;如果一条条地自己修改费时费力&#xff0c;这里就想着简单地用python操作字符串的方式实现。 实现思路 观察bib参考文献格式&#x…

20230102单独编译Toybrick的TB-RK3588X开发板的Android12的内核

20230102单独编译Toybrick的TB-RK3588X开发板的Android12的内核 2023/1/2 17:40 《RK3588_Android12_SDK_Developer_Guide_CN.pdf》 原厂的开发板rk3588-evb1-lp4-v10单独编译内核的方式&#xff1a; cd kernel-5.10 export PATH../prebuilts/clang/host/linux-x86/clang-r4161…

【数据结构】C语言实现链表(单链表部分)

目录 前言 链表 链表的分类 1.单向或者双向 2.带头或者不带头 3.循环或者非循环 单链表实现 定义节点 接口函数实现 创建节点 打印链表 尾插节点 尾删节点 头插节点 头删节点 单链表查找 删除指定位置后的节点 指定位置后插入节点 删除指定位置 指定位置插入节点…

Linux-7 文本编辑vivim

Linux-7 文本编辑vi/vim vim介绍 什么是vim&#xff1f; vi和vim是Linux下的一个文本编辑工具。&#xff08;可以李姐为Windows的记事本或word文档&#xff09; 为什么要使用vim&#xff1f; 因为Linux系统一切皆为文件&#xff0c;而我们工作最多的就是修改某个服务的配置&a…

一名七年老安卓的 2022 总结

大家好&#xff0c;我是 shixin。一转眼到了 2022 的最后一天&#xff0c;今年发生了很多事&#xff0c;这篇文章来总结一下。长短期目标达成情况和去年一样&#xff0c;我的长期目标是成为具备创业能力的人&#xff0c;包括商业思维和全栈技术能力。总的来说&#xff0c;今年是…

STM32MP157驱动开发——USB设备驱动

STM32MP157驱动开发——USB设备驱动一、简介1.电气属性2.USB OTG3.STM32MP1 USB 接口简介4.Type-C 电气属性二、USB HOST 驱动开发1.USB HOST 驱动编写2.配置 PHY 控制器3.配置usbh_ehci三、USB HOST 测试1.鼠标键盘驱动使能2.U盘驱动四、USB OTG驱动开发1.USB OTG 控制器节点信…

系统设计实战一

文章目录前言一、服务幂等1.防止订单重复下单1.1 场景如下&#xff1a;当用户在提交订单的时候1.2 重复下单解决方案1.3案例一幂等性总结2 防止订单ABA问题2.1 场景如下&#xff1a;当在修改订单用户信息的时候发生服务器或者网络问题导致的重试2.2 ABA问题解决方案2.3 业务ABA…

Mac本地安装Mysql并配置

文章目录一、安装Mysql二、配置Mysql三、启动mysql四、SQL语法初步了解1.创建数据库2.建表3.查看表一、安装Mysql 笔者推荐采用安装包的方法安装Mysql&#xff0c;比较简单&#xff0c;适合新手。 首先在网上搜安装包&#xff1a; baidu按关键字搜即可&#xff1a;mysql mac安…

多兴趣向量重构用户向量

Re4: Learning to Re-contrast, Re-attend, Re-construct for Multi-interest Recommendation 论文地址&#xff1a;https://arxiv.org/pdf/2208.08011.pdf 一般的多兴趣建模过程是对用户序列进行编码&#xff0c;抽取出用户的多个兴趣向量&#xff0c;然后利用这些用户兴趣向…

【Vue中使用Echarts】echarts初体验

文章目录一、echarts简介二、初次体验echarts1.下载2.在vue中引入echarts①全局引入&#xff08;代码&#xff09;② 局部引入一、echarts简介 在大数据盛行的今天&#xff0c;数据可视化变得越来越广泛。而在前端工作中&#xff0c;数据可视化用得最多的&#xff0c;可能就是…

Usaco Training 刷怪旅 第三层 第四题 :Combination Lock

一个六年级博主写文章不容易&#xff0c;给个关注呗 &#xff08;点赞也行啊&#xff09; 本蒟蒻的bilibili账号 注&#xff1a;这种题当你看不懂的时候是可以把题目复制去洛谷看中文版的 Farmer Johns cows keep escaping from his farm and causing mischief. To try and pre…

如何通过 Python 与 ChatGPT 对话

文章目录简介安装 OpenAI API实例1预备条件: 1. 科学上网&#xff1b; 2. 注册 OpenAI 账号。 简介 ChatGPT 是 GPT-3 语言模型的变体&#xff0c;专为会话语言生成而设计。要在 Python 中使用 ChatGPT&#xff0c;您需要安装 OpenAI API 客户端并获取 API 密钥。当前提你需要…