Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 2.7 scrapy:如何收集仅通过单击“收集”显示的项目;“显示更多项目”;按钮_Python 2.7 - Fatal编程技术网

Python 2.7 scrapy:如何收集仅通过单击“收集”显示的项目;“显示更多项目”;按钮

Python 2.7 scrapy:如何收集仅通过单击“收集”显示的项目;“显示更多项目”;按钮,python-2.7,Python 2.7,我使用scrapy从站点收集产品: 但有些产品仅通过按下按钮显示: 香椿蜜制品 我试图用滚动键进入按钮,但没有成功 它只收集显示的前12项。 如何收集这些产品的数据 这是我的代码: import scrapy from scrapy.spiders import CrawlSpider, Rule from scrapy.linkextractors import LinkExtractor import re class Product(scrapy.Item): barcode =

我使用scrapy从站点收集产品: 但有些产品仅通过按下按钮显示: 香椿蜜制品 我试图用滚动键进入按钮,但没有成功 它只收集显示的前12项。 如何收集这些产品的数据

这是我的代码:

import scrapy
from scrapy.spiders import CrawlSpider, Rule
from scrapy.linkextractors import LinkExtractor
import re

class Product(scrapy.Item):
    barcode = scrapy.Field()
    name = scrapy.Field()

class BarcodessSpider(CrawlSpider):
    name = "coop_barcodes"
    allowed_domains = ["www.coop.nl"]
    start_urls = [
        "https://www.coop.nl/boodschappen/groenten-en-aardappelen/roerbakgroenten/roerbakgroenten"
    ]

    rules = (Rule(LinkExtractor(allow=('https:.*',),  
                           restrict_xpaths='//*[(@id = "showMoreProductsContainer")] | //*[contains(concat( " ", @class, " " ), concat( " ", "btn", " " ))]'),
                           callback='parse_item1',
                           follow=True),)

    items = []

    def parse_item1(self, response):
        for product in response.xpath('//@href'): 
            prod = product.root
            if re.match('\d{8}\d+',str(prod).split('/')[-1]) != None:
                 self.items.append(name)
        for item in self.items:
            yield item

使用动态加载的站点通常必须发送HTTP请求以获取新内容,这可能会被Chrome捕获(我不知道如何在其他浏览器中实现)。在Chrome中打开站点,按F12并转到Console选项卡。右键单击空白控制台并选择“LogxMLHTTPREQUEST”。然后按下“加载更多”按钮(或任何触发加载的按钮)。您应该会看到控制台中弹出一个或几个URL。带有GET请求的是您想要的。在您的站点中,会为您提供一个漂亮的JSON列表,其中列出了已加载的所有产品

在这些情况下,我建议直接通过这些URL(注意URL中如何更改页码和页面大小以进行导航)而不是通过主站点进行抓取