Python 2.7 scrapy:如何收集仅通过单击“收集”显示的项目;“显示更多项目”;按钮
我使用scrapy从站点收集产品: 但有些产品仅通过按下按钮显示: 香椿蜜制品 我试图用滚动键进入按钮,但没有成功 它只收集显示的前12项。 如何收集这些产品的数据 这是我的代码: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 =
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中如何更改页码和页面大小以进行导航)而不是通过主站点进行抓取