2017-08-09 144 views
0

我用scrapy收集产品从网站:只能通过按下按钮https://www.coop.nl/boodschappen/groenten-en-aardappelen 但部分产品显示: 香椿米尔producten 我试图用滚动进入按钮,但没有成功 它只能收集12首显示的项目。 如何收集这些产品的数据?scrapy:如何收集仅通过点击“显示更多项目”按钮显示的项目?

这是我的代码:使用动态加载通常都有向外发送HTTP请求来获取新的内容,这可能是由Chrome被抓(我不知道怎么做,在

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 

回答

0

网站其它浏览器)。在Chrome中打开该网站,按F12并转到“控制台”选项卡。右键单击空白控制台并选择“LogXMLHttpRequests”。然后按“加载更多”按钮(或任何触发加载)。您应该在控制台中看到一个或几个URL弹出。具有GET请求的那个是你想要的。在您的网站中,link可以为您提供所有已加载产品的良好JSON列表。

在这些情况下,我会建议直接通过这些URL(请注意URL中如何更改PageNumber和PageSize来导航)而不是主站点。

相关问题