栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

scrapy-redis搭建分布式抓取亚马逊best排行榜

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

scrapy-redis搭建分布式抓取亚马逊best排行榜

不会吧不会吧,不会还有人不会scarpy吧?
抖个包袱,没有那个意思哈!!!

scrapy-redis简介
  • 官方架构

  • Slaver(从)从Master(主)拿到爬取任务(Request、url)进行数据抓取,Slaver抓取数据的同时,产生新任务的Request便提交给 Master(主) 处理

  • Master(主)负责将未处理的Request去重和任务分配,将处理后的Request加入待爬队列,并且存储爬取的数据。

scrapy-redis核心思想

说白了,就是利用redis机制,实现 request 的去重,多个爬虫分享一个 request 队列,将 scrapy 从单台机器扩展为多台机器

scrapy-redis安装

pip install scarpy-redis

创建一个项目

scrapy startproject amazon

创建爬虫文件

scrapy genspider -t crawl amazon_spider

1.1 解析数据(xpath)

1.1.1 据我分析,所要爬取的页面是动态加载的,需要下拉才能获取完整数据,这个就需要借助selenium,但是效率太低,如果要数据量较大,不推荐

1.2.1 但是通过我细心观察,源码中有存放完整数据,转换成了json格式,这不是雪中送炭吗!那我们正式讲解本章内容
1.3.1 上面我们已经拿到完整的数据,我们需要构造完整的链接,来抓取数据

2.1 抓取数据(amazon_spider.py)

2.1.1 抓取asin链接

import re
from scrapy_redis import spiders
import json
import datetime
from ..items import TaocheItem

class TaocheSpiderSpider(spiders.RedisSpider):
    name = 'taoche_spider'
    redis_key = 'amazon:start_urls'  #指定redis_key

    def parse(self, response):
        asin = response.xpath('//div[@]/@data-client-recs-list').extract()  # 获取所有asin
        category = response.xpath('//span[@]/text()').extract()  #获取类目
        data = json.loads(asin[0])
        for ca in category:
            for da in data:
                #1、解析
                asin = da['id'] 
                rank = da['metadataMap']['render.zg.rank']  # 排名
                url = f'https://www.amazon.com/dp/{asin}?th=1' # 构造完整链接
                item = TaocheItem()
                item['asin'] = asin
                item['rank'] = rank
                item['url'] = url
                item['cat'] = ca
                yield scrapy.Request(url=url, callback=self.parse_detail, meta={'item': item})

2.2.1 抓取详情页面

    def parse_detail(self, response):
        meta = response.meta    # 接收上面传过来的meta字典
        item = meta['item']
        
        title = 
            re.findall('(.*?)', response.text)[
                0].strip(" ") 
                if re.findall('(.*?)',
                              response.text) else ''

        # 价格
        if response.xpath('.//span[@]/text()'):
            price = response.xpath('.//span[@]/text()').extract()[0].strip('$')
        elif response.xpath('//span[@]/text()'):
            price = response.xpath('//span[@]/text()').extract()[0].strip('$')
        else:
            price = ''

        # 星级
        stars = response.xpath('/*;q=0.8',
                        'Accept-Language': 'en',
                        'User-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.67 Safari/537.36',
                        'Cookie':'session-id=132-7820908-5512636; ubid-main=131-0969171-3937435; aws-target-data={"support":"1"}; aws-target-visitor-id=1640066826889-327584.38_0; aws-ubid-main=250-7108114-4482887; aws-session-id=000-0000000-0000000; aws-analysis-id=000-0000000-0000000; aws-session-id-time=1640067363l; i18n-prefs=USD; lc-main=en_US; s_nr=1650441678941-Repeat; s_vnum=2078274252676&vn=2; s_dslv=1650441678942; session-id-time=2082787201l; appstore-devportal-locale=zh_CN; _mkto_trk=id:365-EFI-026&token:_mch-aws.amazon.com-1640066827077-37141; aws-mkto-trk=id:112-TZM-766&token:_mch-aws.amazon.com-1640066827077-37141; aws_lang=cn; AMCVS_7742037254C95E840A4C98A6@AdobeOrg=1; s_cc=true; AMCV_7742037254C95E840A4C98A6@AdobeOrg=1585540135|MCIDTS|19151|MCMID|25398098771975688903309274459050119441|MCAAMLH-1655193582|3|MCAAMB-1655193582|RKhpRz8krg2tLO6pguXWp5olkAcUniQYPHaMWWgdJ3xzPWQmdj0y|MCOPTOUT-1654595982s|NONE|MCAID|NONE|vVersion|4.4.0; aws-userInfo-signed=eyJ0eXAiOiJKV1MiLCJrZXlSZWdpb24iOiJ1cy1lYXN0LTEiLCJhbGciOiJFUzM4NCIsImtpZCI6ImFhNDFkZjRjLTMxMzgtNGVkOC04YmU5LWYyMzUzYzNkOTEzYiJ9.eyJzdWIiOiIiLCJzaWduaW5UeXBlIjoiUFVCTElDIiwiaXNzIjoiaHR0cDpcL1wvc2lnbmluLmF3cy5hbWF6b24uY29tXC9zaWduaW4iLCJrZXliYXNlIjoidWVhVW11TnlIVG02am42TXZOTzhPajZOQ3hzMzVJVnp2dk0zaGQwaGNZQT0iLCJhcm4iOiJhcm46YXdzOmlhbTo6MTczMjg3OTA4ODk2OnJvb3QiLCJ1c2VybmFtZSI6Imd1b2xpeWluZyJ9.J_Pxsq-oHIwwEk23j86zM6OjWEu7Y_xe1SVigbVY3GVM9Ri7U30jkkQbMK0XZj4w3dudA4nJutx_QoMfvPyaSrq-z-abZA0i7Enlc9lOk2hj8tWmXCIP8HM6KSXQnYTl; aws-userInfo={"arn":"arn:aws:iam::173287908896:root","alias":"","username":"guoliying","keybase":"ueaUmuNyHTm6jn6MvNO8Oj6NCxs35IVzvvM3hd0hcYAu003d","issuer":"http://signin.aws.amazon.com/signin","signinType":"PUBLIC"}; regStatus=registered; awsc-color-theme=light; awsc-uh-opt-in=optedOut; noflush_awsccs_sid=44efc26057037bfb3a76afb21553f47bd88a10ee4396ef03fb2a0725609e487e; aws-signer-token_us-east-1=eyJrZXlWZXJzaW9uIjoia0lYaHRyWi5POFhvLjFneThKS251dnVOMkdmLnNaekYiLCJ2YWx1ZSI6Ik5pcWFBcnR2RFpaK1dtSCtnb3gvZWZNNXFNWVNEcFBQVXU1NFZoaXdNMUU9IiwidmVyc2lvbiI6MX0=; aws-signer-token_us-west-2=eyJrZXlWZXJzaW9uIjoiTm5jSVdFQ0gubzYuMGlFS3VEZk9HbmdHVTZWX2JHU3IiLCJ2YWx1ZSI6IlMyK2NqOHU1SWRxdThOUityUGhQWklTSTBtVTdTSTRzQUN0Unp0VTdBbTg9IiwidmVyc2lvbiI6MX0=; s_sq=[[B]]; session-id-eu=259-5325582-3849510; ubid-acbuk=257-5013527-1544704; session-id-time-eu=2285315333l; x-amz-captcha-1=1654619359947279; x-amz-captcha-2=kdK+pRacBvV0/C2ON8VoCQ==; session-token="IjG7lRcnVW+CVUclLZ0yZFV9JFIco2e4bM7QLQoXVkn6Hhvm+Katu2747zcP93hofXpkcHHNQZIl4BPm1yoRhTildooVOy/uImskrmCJ0QbH0ORn1fDaJvydwrSapUmmHkoH23DI5rt2Uo8eFFfEQ3zrUsYDrw4di4qqF+b51SJwp65LjQcWFkJLWNQQkczZYu6QQYYRmTtwLSoXxJWWUA=="; csm-hit=tb:EJ3BAFMM9JN993D6ACQF+s-4ARBRR7G7XBJSYK1VHPS|1654616613057&t:1654616613057&adb:adblk_no'

        },

    #配置scrapy-redis调度器
    'SCHEDULER' : "scrapy_redis.scheduler.Scheduler",
    #配置url去重
    'DUPEFILTER_CLASS' : "scrapy_redis.dupefilter.RFPDupeFilter",
    #配置优先级队列
    'SCHEDULER_QUEUE_CLASS' : 'scrapy_redis.queue.PriorityQueue',
    #可以暂停爬虫
    'SCHEDULER_PERSIST': True,
	# reids链接
    'REDIS_PORT' : 6379,
    'REDIS_HOST':'localhost'#Master Slaver需要更改为master的ip,
	
	ITEM_PIPELINES = {
   'taoche.pipelines.TaochePipeline': 300,
}
	HOST = 'localhost'
	PORT = 3306
	USER = '****'
	PASSWD = '***'
	DB = '****'

启动爬虫

scrapy crawl amazon_spider


成功获取到我们想要的数据

想要获取完整项目私信泰隆,看到都会回复。
本文章若对你有帮助,烦请点赞,收藏,关注支持一下
各位的支持和认可就是我最大的动力

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/969350.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号