简易界面爬虫小项目

该项目是一个简易的界面爬虫,旨在通过UI展示爬取过程。虽然原计划包括运行时内容显示和日志文件,但最终仅实现了基本的爬虫功能。在代码演示部分,可以看到如何操作该爬虫,并在运行演示中体验其实际效果。
摘要由CSDN通过智能技术生成

项目目录

在这里插入图片描述

注意事项

  1. 本来是要再做一个界面在运行时显示正在爬取哪个内容
  2. log 文件本来是要做一个日志文件,不过其实是单机版本其实好像没什么必要(实际上是嫌太麻烦了)

代码演示

lib 文件夹下 main.py 文件

import os,sys

path = os.path.dirname(os.path.dirname(__file__))

sys.path.append(path) # 添加到环境变量

if __name__ == '__main__':
    from bin.JingDongProject import jing_dong_project

    jing_dong_project()

bin 文件夹下 JingDongProject.py 文件

from PyQt5.QtGui import *
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *    # 导入PyQt5部件
from PyQt5.QtWidgets import QMainWindow, QApplication,QLabel,QTableWidgetItem,QPushButton,QLineEdit,QGridLayout,QWidget,QTableWidget

from core.UI.Start import Ui_Dialog

class Window(QDialog,Ui_Dialog): # 实例化初始界面
    def __init__(self):
        super().__init__()
        self.setupUi(self)
    def setup_ui(self):
        pass


class jing_dong_project:
    def __init__(self):
        app = QApplication([])

        window = Window()
        window.show()
        app.exec_()

core 文件夹下 Spider 文件夹下 spider.py 文件

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.edge.EdgeOptions import EdgeOptions
from conf import Settings
from time import sleep
from lxml import etree
import os

class Spider:
    def __init__(self, goods_name, paixu, goods_page, comment_page):
        self.goods_name = goods_name
        self.paixu = paixu
        self.goods_page = goods_page
        self.comment_page = comment_page

        self.run()

    def run(self):
        self.start_web()

        self.search_goods()

        self.Paixu()

        self.goods_message()

        self.driver.close()

    def start_web(self):
        """初始化浏览器"""
        # 1.创建Edge浏览器对象,这会在电脑上在打开一个浏览器窗口
        options = EdgeOptions()
        options.add_arguments([r"--headless", r"--disable-gpu"]) # 无头浏览器

        self.driver = webdriver.Edge(capabilities=options.to_capabilities())
        # self.driver = webdriver.Edge()

        # 2.通过浏览器向服务器发送URL请求
        self.driver.get(Settings.URL)

        sleep(Settings.SLEEP_TIME)

    def page_read(self):
        """网页源码解析"""
        # 获取此时的页面源码
        page = self.driver.page_source
        # xpath 解析
        self.tree = etree.HTML(page)

    def search_goods(self):
        """输入商品名称,并点击搜索"""
        name_input = self.driver.find_element_by_id("key")
        name_input.send_keys(self.goods_name)
        sleep(Settings.SLEEP_TIME)

        # 点击搜索
        click = self.driver.find_element_by_xpath('//*[@id="search"]/div/div[2]/button')
        self.driver.execute_script('arguments[0].click()', click)
        sleep(Settings.SLEEP_TIME)

    def goods_message(self):
        """获取商品信息"""
        """
        商品页翻页循环
            每次循环获取商品价格、名称等信息(这也是一个循环,因为一页有多个商品)
                获取一个商品信息后(即一个循环后)
                    进入商品详情页获取评论,评论翻页也需要循环
        """
        # 排序方式

        page = 1
        while page <= int(self.goods_page):
            print(page)
            # 滚动加载该页面所有信息
            self.driver.execute_script('window.scrollTo(0,document.body.scrollHeight)')
            sleep(Settings.SLEEP_TIME)

            self.goods_price_name()

            self.page_read()

            page_list_length = len(self.tree.xpath('//*[@id="J_bottomPage"]/span[1]/a')) # 页数条的长度,最后一个是下一页
            # 点击下一页
            next_page = self.driver.find_element_by_xpath('//*[@id="J_bottomPage"]/span[1]/a[{}]'.format(page_list_length))
            self.driver.execute_script('arguments[0].click()', next_page)
            page += 1

    def goods_price_name(self):
        """爬取商品信息"""
        # 获取商品价格

        self.page_read()

        length = len(self.tree.xpath('//*[@id="J_goodsList"]/ul/li')) # 获取该页商品数量

        count = 1
        while count <= length:
            print(count)

            self.page_read()

            if len(self.tree.xpath('//*[@id="J_goodsList"]/ul/li[{}]/div/div[3]/strong/i/text()'.format(count))) != 0
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值