如果在Scrapy中使用Javascript,如何做下一页

问题描述 投票:0回答:1

我有爬行下一个按钮的问题我尝试了基本的一个,但在检查HTML代码后,它使用javascript我尝试了不同的规则,但没有任何作品在这里是网站的链接。

https://www2.hm.com/en_us/sale/shopbyproductladies/view-all.html

下一个按钮名称是“加载更多产品”

这是我的工作代码

def parse(self, response):
    for product_item in response.css('li.product-item'):
        url = "https://www2.hm.com/" + product_item.css('a::attr(href)').extract_first() 
        yield scrapy.Request(url=url, callback=self.parse_subpage)

def parse_subpage(self, response):
    item = {
    'title': response.xpath("normalize-space(.//h1[contains(@class, 'primary') and contains(@class, 'product-item-headline')]/text())").extract_first(),
    'sale-price': response.xpath("normalize-space(.//span[@class='price-value']/text())").extract_first(), 
    'regular-price': response.xpath('//script[contains(text(), "whitePrice")]/text()').re_first("'whitePrice'\s?:\s?'([^']+)'"),
    'photo-url': response.css('div.product-detail-main-image-container img::attr(src)').extract_first(),
    'description': response.css('p.pdp-description-text::text').extract_first()

        }   
    yield item
python web-scraping scrapy
1个回答
1
投票

正如评论中已经暗示的那样,根本不需要涉及JavaScript。如果您访问该页面并打开浏览器的开发人员工具,您会看到有这样的XHR请求:

https://www2.hm.com/en_us/sale/women/view-all/_jcr_content/main/productlisting_b48c.display.json?sort=stock&image-size=small&image=stillLife&offset=36&page-size=36

这些请求返回JSON数据,然后使用JavaScript在页面上呈现这些数据。所以你可以使用像json.dumps(response.text)这样的东西从这些URL中抓取数据。控制offsetpage-size参数返回的产品。我假设当你收到一个空的JSON时你就完成了。或者,您可以设置offset=0page-size=9999以一次性获取数据(9999只是一个任意数字,在这种情况下就足够了)。

© www.soinside.com 2019 - 2024. All rights reserved.