【问题标题】:Accesing "Next" page with scrapy rules使用scrapy规则访问“下一页”
【发布时间】:2019-06-04 01:29:41
【问题描述】:

我最近回到了几个月前编写的一个乱码。

代码的目的是抓取一些亚马逊产品的数据,它的工作原理是这样的:

我们以这个页面为例

https://www.amazon.com/s?k=mac+makeup&crid=2JQQNTWC87ZPV&sprefix=MAC+mak%2Caps%2C312&ref=nb_sb_ss_i_1_7

代码所做的是输入该页面的每个产品并从中获取数据,在完成从该页面抓取所有数据后,它会移动到下一个(在本例中为第 2 页)。

最后一部分停止工作。

我在规则中有这样的东西(我不得不重写一些 xpath,因为它们已经过时了)

import scrapy
import re
import string
import random
from scrapy.spiders import CrawlSpider, Rule
from scrapy.linkextractors import LinkExtractor
from scrapyJuan.items import GenericItem
from scrapy.exceptions import CloseSpider
from scrapy.http import Request

class GenericScraperSpider(CrawlSpider):

    name = "generic_spider"

    #Dominio permitido
    allowed_domain = ['www.amazon.com']

    search_url = 'https://www.amazon.com/s?field-keywords={}'

    custom_settings = {

        'FEED_FORMAT': 'csv',
        'FEED_URI' : 'GenericProducts.csv'

    }

rules = {

        #Next button
        Rule(LinkExtractor(allow =(), restrict_xpaths = ('//li[@class="a-last"]/a/@href') )),

        #Every element of the page

        Rule(LinkExtractor(allow =(), restrict_xpaths = ('//a[contains(@class, "a-link-normal") and contains(@class,"a-text-normal")]') ), 
                                callback = 'parse_item', follow = False)

    }

def start_requests(self):

        txtfile = open('productosGenericosABuscar.txt', 'r')

        keywords = txtfile.readlines()

        txtfile.close()

        for keyword in keywords:

            yield Request(self.search_url.format(keyword))



    def parse_item(self,response):

这就像一个月前一样工作,但我现在无法让它工作。

有什么想法吗?

【问题讨论】:

    标签: python-3.x xpath web-scraping scrapy


    【解决方案1】:

    亚马逊有一个反机器人机制,可以在一些迭代后请求验证码。您可以确认它检查返回的 HTTP 代码,如果它正在等待验证码,您应该收到类似 503 Service Unavailable 的信息。我没有看到您的代码 sn-p 有任何问题(除了 {} 上的 {} 而不是 (),这实际上不会影响结果,因为您仍然可以对其进行迭代)。

    此外,请确保您的蜘蛛是继承 CrawlSpider 而不是 Scrapy

    【讨论】:

    • 感谢您的回答!,我使用的是“CrawlSpider”,但我没有得到服务不可用的代码。我会发布完整的蜘蛛
    猜你喜欢
    • 1970-01-01
    • 2014-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多