python爬虫(爬取唯品会)

2023-11-18

import json

import requests
from bs4 import BeautifulSoup
from selenium import webdriver
from time import sleep


class VipSpider(object):
    def __init__(self, url, search, start_page, end_page):
        self.url = url
        self.search = search
        self.start_page = start_page
        self.end_page = end_page
        self.headers = {
            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36"}
        self.driver = webdriver.Firefox()

    def handle_click(self):
        self.driver.get(self.url)
        self.driver.find_elements_by_xpath("//*[@id='J_main_nav_link']/li[13]/a")[0].click()
        sleep(2)
        self.driver.find_elements_by_xpath("//*[@id='J-search']/div[1]/input")[0].send_keys(self.search)
        sleep(2)
        self.driver.find_elements_by_xpath("//*[@id='J-search']/div[1]/a/span")[0].click()
        sleep(3)

    def handle_url(self, page):
        Durl = self.driver.current_url  # "https://category.vip.com/suggest.php?keyword=%E7%AF%AE%E7%90%83&ff=235|12|1|1"
        index = Durl.rfind("&")
        Durl = Durl[:index]
        data = {
            "page": page
        }
        res = requests.get(url=Durl, params=data, headers=self.headers)
        newurl = res.url
        print(newurl)
        return newurl

    def scroll_page(self, req):
        self.driver.get(req)
        sleep(3)
        for x in range(20):
            js = "var q=document.documentElement.scrollTop=10000"
            self.driver.execute_script(js)  # 执行脚本(滚动)
            sleep(5)
        html = self.driver.page_source

        return html

    def download(self, request):
        soup = BeautifulSoup(request, "lxml")
        SectionList = soup.select("section#J_searchCatList")[0]
        GoodsList = SectionList.select("div.c-goods")
        items = []
        for div in GoodsList:
            item = {}
            imageslink = div.img["data-original"]
            title = div.select("h4.goods-info a")[0].get_text()
            discount = div.select("div.goods-info span")[0].get_text()
            pricewra = div.select("div.goods-info em")[0].get_text()
            marprice = div.select("div.goods-info del.goods-market-price ")[0].get_text()
            item["图片链接"] = imageslink
            item["商品名称"] = title
            item["商品折扣"] = discount
            item["特卖价格"] = pricewra
            item["原始价格"] = marprice
            items.append(item)
        return items

    def startSpider(self):
        htmlList = []
        for page in range(int(self.start_page), int(self.end_page) + 1):
            if page == 1:
                self.handle_click()
                req = self.handle_url(page)
                newhtml = self.scroll_page(req)
                htmlList += self.download(newhtml)
            else:
                req = self.handle_url(page)
                newhtml = self.scroll_page(req)
                htmlList += self.download(newhtml)
        # 【数据的存储】写入json数据
        # 将列表转化成json字符串
        string = json.dumps(htmlList)
        with open("vip2.json", "w", encoding="utf-8") as fp:
            fp.write(string)


def main():
    url = "http://www.vip.com/"
    search = input("请输入你要搜索的商品:")
    start_page = input("请输入你要爬取的起始页:")
    end_page = input("请输入你要爬取的结束页:")
    spider = VipSpider(url, search, start_page, end_page)
    spider.startSpider()


if __name__ == '__main__':
    main()

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python爬虫(爬取唯品会) 的相关文章

随机推荐

  • MATLAB绘制局部放大图

    在数据处理时 当曲线出现跳变的时间极短 出于观察跳变时间段波形的需要 需要对曲线跳变处进行局部放大处理 本文给出了此种情况下MATLAB绘制局部放大图的流程 同时 当曲线的峰值数据与平均值相差一个数量级时 如峰值12 平均值范围落在是 1间
  • awk内置函数

    http blog csdn net nuoline article details 8610679
  • 【爬虫进阶】猿人学任务七之字体反爬(难度2.0)

    目录 前言 特此说明 分析 代码过程 成果 完整源码 前言 往期有讲解过某团字体反爬 感觉效果不太好 所以本章重新找了个例子 希望能帮助大家理解透彻 再遇到直接手撕 特此说明 如果涉及到版权问题 请立刻联系博主删除 分析 首先 我们看题目
  • C++实现栈(链表模拟)【每一步详细深入讲解,代码清晰、简单、易懂】

    文章目录 一 利用链表实现栈 1 链表实现的思路 2 设计栈的结构 3 入栈操作 4 出栈操作 5 判断栈空 6 构造析构 7 完整代码 一 利用链表实现栈 1 链表实现的思路 由于栈是一种较为简单的数据结构 用链表实现栈 逻辑上和数组差不
  • 多输入通道和多输出通道

    目录 多输入通道和多输出通道 目录 1 什么是多输入通道和多输出通道 2 多输入通道和多输出通道的实现 2 1 多输入通道和多输出通道的卷积操作 2 2 多输入通道和多输出通道的全连接操作 3 多输入通道和多输出通道的实例 3 1 导入必要
  • 若依SpringBoot+Vue分离版打包部署(前端)

    遇到的问题为vue项目webpack dev server配置后本地连接服务器地址正常请求 但是打包之后请求服务器接口一直是404 Vue前端打包 1 npm run build prod 打包 2 npm run preview 打包正式
  • 【Vue2从入门到精通】深入浅出,带你彻底搞懂Vue2组件通信的9种方式

    文章目录 人工智能福利文章 Vue组件间通信分类 1 props emit 1 1 父组件向子组件传值 1 2 子组件向父组件传值 2 parent children 3 ref refs 3 1 ref作用于组件 3 2 ref作用于Ht
  • FLASH位宽为8、16、32时,CPU与外设之间地址线的连接方法

    原文地址 http www eefocus com E5 8D 83 E9 87 8C E7 9F A5 E9 B9 B0 blog 10 03 186914 04945 html FLASH连接CPU时 根据不同的数据宽度 比如16位的N
  • java BigDecimal保留两位小数

    对于一些精准的数字 如涉及到金额时我们一般会使用BigDecimal类型来保存和处理 在处理保留小数位数时 如果通过DecimalFormat表达式需要注意下 1 通过DecimalFormat保留两位小数 通过上图可以看到 在补位时 如果
  • 文件上传之IIS6.0解析漏洞

    文章目录 1 判断iis版本 2 使用目录解析漏洞 2 1 写asp一句话木马 2 2 bp抓包 2 3 修改上传路径 2 4 实用工具连接 2 5 get shell 3 使用文件解析漏洞 3 1 写一句话马 3 2 上传 3 3 抓包改
  • mmyolo框架实现在VOC数据集上复现Yolov6教程(详细)

    写在开头 最近学习mmyolo的框架 想着它能将所有配置都写在一个config文件里 只需要改配置文件就可以改动模型 感觉挺方便的 就想着Yolov6用mmyolo框架来实现 但mmyolo并没有提供v6的voc实现配置 v5是有的 看下图
  • RocketMQ的消息优先级

    有些场景 需要应用程序处理几种类型的消息 不同消息的优先级不同 RocketMQ是个先入先出的队列 不支持消息级别或者Topic级别的优先级 业务中简单的优先级需求 可以通过间接的方式解决 下面列举三种优先级相关需求的具体处理方法 第一种
  • Linux环境下的jdk安装(大数据环境)

    jdk安装 创建软件存放目录 上传文件 我使用的MobaXterm 创建解压目录 解压jdk压缩包 修改软件名 使他简洁易操作 配置环境变量 让配置文件生效 查看jdk版本信息 将HP01 的usr文件夹整体拷贝到HP02 HP03目录下
  • 如何使用 FreeRTOS中的xQueueCreate,xQueueSend,xQueueReceive

    信号量Semaphore和互斥量mutex 只能用于进程间的同步 并不能传递更多的数据 在freertos 提供了messageQ 用来在实现进程同步的同时 传递数据 进程间通信 或者ISR和TASK之间通信 如果没有messageQ 则只
  • Object&Objects

    Object 概念 Object 是类层次结构的根 每个类都可以将 Object 作为超类 所有类都直接或者间接的继承自该类 换句话说 该类所具备的方法 所有类都会有一份 toString 作用 以良好的格式 更方便的展示对象中的属性值 重
  • c++ Json库读取和写入json文件

    include json include writer h include json include reader h include
  • Fabric中的“账户”体系

    本文的联盟链是以Fabric为例 本文中transaction翻译成事务 而非交易 联盟链相对于公链 最大的不同在于 联盟链上的数据不是对所有人都公开的 只有联盟内的成员才可以访问 写入链上数据 第二个重要的区别 联盟链不发币 所以联盟链里
  • WSL安装与使用(Ubuntu22.04)

    文章目录 概要 WSL介绍 WSL安装 安装环境 安装方式一 命令行安装 不推荐 可能出现奇怪的问题 安装方式二 通过控制面板安装 WSL 安装Ubuntu22 04 通过Microsoft Store Ubuntu更换镜像源 进入Ubun
  • I2C接口与SPI和UART接口的区别

    一 SPI I2C UART通信速率比较 SPI gt I2C gt UART 1 同步通信 gt 异步通信 2 同步通信时必须有一根时钟线连接传输的两端 3 都是串行通信方式 并行通信用于内部存储间的通信 如flash 4 适合传输的距离
  • python爬虫(爬取唯品会)

    import json import requests from bs4 import BeautifulSoup from selenium import webdriver from time import sleep class Vi