当前位置:   article > 正文

python+scrapy简单爬取淘宝商品信息_scrapy爬取淘宝

scrapy爬取淘宝

python结合scrapy爬取淘宝商品信息

一、功能说明:
  • 已实现功能:
    • 通过scrapy接入selenium获取淘宝关键字搜索内容下的商品信息。
  • 待扩展功能:
    • 爬取商品中的全部其他商品信息。
二、代码解读:
1、创建项目

首先得创建一个scrapy项目,若不会的请看其他创建scrapy项目的博客文章或者我的这篇scrapy安装介绍scrapy安装与创建项目
然后得明白scrapy框架是如何去部署爬虫的,看大图:
scrapy架构图

2、scrapy工作流程文字解释

引擎(Scrapy Engine)从调度器(Scheduler)拿取一个url链接,将此链接给下载中间件(Downloader Middlewares),下载中间件在处理请求体,给下载器,下载器完成下载网页工作后,将结果给下载中间件,下载中间件再给引擎,引擎再将结果给爬虫中间件(Spider Middlerwares) 爬虫中间件再将结果给爬虫解析器(Spiders),爬虫解析器再将解析后的结果result给管道(Item Pipline)若解析出url链接,可以将链接通过引擎给调度器。这样就完成了一个工作流程。

3、明确目标

这里根据搜索框的内容去爬取商品的图片、商品标题、价格、月销量、店铺名,如下图:
在这里插入图片描述

4、正式部署scrapy项目
  • 编写自己的下载中间件
    • 为啥编写下载中间原因:因为我要使用代理和接入selenium
      不清楚下载中间件的具体处理流程的请看下载中间件处理流程
#自定义下载中间件

# 导包
from selenium import webdriver
from scrapy.http import HtmlResponse,Request
from selenium.common.exceptions import TimeoutException
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from .custom_package.ip_pool import ip_Pool
import random


class seleniumMiddleware:
    '''
    功能: 该中间件实现selenium对接,获取response
    实现步骤:
    1、创建selenium实例对象
    2、
    '''

    def __init__(self):
        # 创建属性对象,方便后边儿设置属性
        self.options = webdriver.ChromeOptions()

        # 设置无头浏览器
        # self.options.add_argument('--headless')


        self.options.add_argument('--disable-gpu')

    # 请求链
    def process_request(self, request, spider):

        try:
            pro={'proxy':'http://'+request.meta['proxy']['http'],}

            # 设置代理
            self.options.add_argument('proxy-server=http://'+ request.meta['proxy']['http'])

            # 创建谷歌对象
            self.driver = webdriver.Chrome(options=self.options)

            print("Chrome driver begin...")

            # 发起请求
            self.driver.get(request.url)

            #滚动条下滑
            self.driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")

            # 设置谷歌浏览器等待时间 ---在10秒内浏览器会去检测网页中是否有要求的元素对象存在
            element = WebDriverWait(self.driver, 10).until(
                EC.presence_of_element_located((By.XPATH, '//*[@id="mx_5"]/ul/li[60]'))
            )

            # 返回一个response对象(因为这里是用selenium去获取的网页源代码,所以要创建一个response对象返回给下一个中间件处理)
            return HtmlResponse(url=request.url,body=self.driver.page_source,status=200,request=request,encoding='utf8')

        except Exception:
            print("selenium请求发生异常")

            # 发生异常也要返回一个response对象,但是这个对象body属性内容为空
            return HtmlResponse(url=request.url,status=200,request=request,encod
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/159502
推荐阅读
相关标签
  

闽ICP备14008679号