我使用scrapy从网站收集产品:https://www.coop.nl/boodschappen/groenten-en-aardappelen 但有些产品只能通过按下按钮显示: Toon meer producten 我尝试使用Roll进入按钮但没有成功 它只收集了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
答案 0 :(得分:0)
使用动态加载的网站通常必须发送HTTP请求以获取新内容,Chrome可以捕获这些内容(我不知道如何在其他浏览器中执行此操作)。在Chrome中打开该网站,按F12并转到“控制台”标签。右键单击空白控制台,然后选择" LogXMLHttpRequests"。然后按"加载更多"按钮(或任何触发加载的东西)。您应该会在控制台中看到一个或几个URL。具有GET请求的那个是你想要的。在您的网站中,link会为您提供所有已加载产品的精美JSON列表。
在这些情况下,我建议直接通过这些URL进行抓取(在URL中注意如何更改PageNumber和PageSize进行导航)而不是主站点。