爬虫笔记18——selenium自动加载并存储vip(唯品会)网页数据

爬取唯品会的商品数据信息

整体的流程就是在唯品会首页搜索栏搜索对应的商品,然后跳转到对应商品页面进行数据的爬取、筛选和存储。

  • 其实也有另外一个爬取方案,不用selenium也是可以爬取到相应的数据,通过分析,搜索结果的页面是一个动态网页。动态页面的话这就要找到页面数据对应的接口,然后请求接口获取数据,我测试的时候返回的是个回调函数数据,把回调函数这个参数去掉它会变成json数据,然后进行筛选提取即可。有兴趣的可以去试试。

目前这里主要用的是selenium操作并返回网页的源代码提取数据:

思路分析:

1、 用selenium自动加载对应的网页数据,然后使用浏览器对象的page_source获取网页的源代码。

2、通过源代码,我们可以使用xpath的方式提取网页的商品数据信息。

3、最后就是把提取到的信息存储进去MongoDB数据库。

4、另外,要提取多页数据可以用格式化的方式改一下网页的参数,更改页面继续上面的操作即可。

代码示例:

python 复制代码
# -*- coding: utf-8 -*-
# @Time:      2024/06/29 11:59
# @File:       selenium爬取唯品会.py
#仅供学习参考

import pymongo
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time


class SpiderVIP:
    def __init__(self, goods):
        # 商品关键词
        self.goods = goods
        # 数据库连接对象
        self.mongoDB = pymongo.MongoClient()
        self.connect = self.mongoDB['py_spider']['vip_data']
        # 创建浏览器驱动对象
        self.browser = webdriver.Chrome()
        # 创建等待操作对象
        self.wait_ob = WebDriverWait(self.browser, 10)
        self.url = 'https://category.vip.com'

    # 获取唯品会首页并搜索商品获取网页源代码
    def start(self):
        self.browser.get(self.url)

        # 如果网站采用了动态html技术,那么页面上的部分元素出现时间便不能确定,
        # 这个时候就可以设置一个等待时间,强制要求在时间内出现,否则报错。
        # presence_of_element_located:判定符合查询条件的一个元素是否存在
        search_input = self.wait_ob.until(EC.presence_of_element_located(
            (By.XPATH, "//input[@class='c-search-input  J-search-input']"))
        )
        search_input.send_keys(self.goods)

        search_button = self.wait_ob.until(EC.presence_of_element_located(
            (By.XPATH, "//a[@class='c-search-button  J-search-button  J_fake_a']")
        ))
        # 让检索框有充足的时间写入数据,程序休眠并加载完搜索按钮后点击
        time.sleep(2)
        search_button.click()
        time.sleep(2)

        self.roll_page()
        self.parse_page()

    def parse_page(self):
        div_list = self.browser.find_elements(
            By.XPATH,
            '//section[@id="J_searchCatList"]/div[@class="c-goods-item  J-goods-item c-goods-item--auto-width"]'
        )

        for div in div_list:
            price = div.find_element(
                By.XPATH,
                './/div[@class="c-goods-item__sale-price J-goods-item__sale-price"]'
            ).text

            title = div.find_element(
                By.XPATH,
                './/div[2]/div[2]'
            ).text

            item = {
                'title': title,
                'price': price
            }
            print(item)
            self.insert_mongo(item)
        self.click_next_page()

    # 页面滚动
    def roll_page(self):
        for i in range(1, 12):
            js_code = f"document.documentElement.scrollTop = {i * 1000}"
            self.browser.execute_script(js_code)
            time.sleep(1)

    def click_next_page(self):
        try:
            click_button = self.browser.find_element(By.XPATH, "//*[@id='J_page_special']/a[2]")
            if click_button:
                click_button.click()
                time.sleep(2)
                # 进入下一页解析页面
                self.roll_page()
                self.parse_page()
            else:
                self.browser.close()
        except Exception as e:
            print('没有下一页了', e)

    # 数据存储
    def insert_mongo(self, item):
        self.connect.insert_one(item)
        print('该条数据插入成功!')

    def main(self):
        self.start()


if __name__ == '__main__':
    search_value = input('输入要搜索的商品:')
    vip = SpiderVIP(search_value)
    vip.main()

MongoDB数据库信息如下:

相关推荐
薛定e的猫咪4 小时前
因果推理研究方向综述笔记
人工智能·笔记·深度学习·算法
AOwhisky4 小时前
虚拟化技术学习笔记
linux·运维·笔记·学习·虚拟化技术
一只机电自动化菜鸟5 小时前
一建机电备考笔记(33) 机电专业技术(起重技术-吊装方案)(含考频+题型)
经验分享·笔记·学习·职场和发展·课程设计
小陈phd6 小时前
多模态大模型学习笔记(四十)——从“看字”到“懂结构”:版面分析与表格解析技术全解
笔记·学习
xuhaoyu_cpp_java6 小时前
SpringMVC学习(二)
java·经验分享·笔记·学习·spring
噜噜噜阿鲁~7 小时前
python学习笔记 | 9.2、模块-安装第三方模块
笔记·python·学习
我胖虎不答应!!9 小时前
Three.js开发思想笔记
javascript·笔记·three.js
程序leo源9 小时前
C语言知识总结
c语言·开发语言·c++·经验分享·笔记·青少年编程·c#
羊群智妍10 小时前
2026年GEO优化实战:AI搜索优化监测工具全解析
笔记
中屹指纹浏览器10 小时前
2026浏览器插件指纹溯源机制与插件环境安全优化实战指南
经验分享·笔记