我尝试从target.com获取产品评级信息。产品的网址是
查看response.body后,我发现评级信息没有静态加载。所以我需要使用其他方式。我发现一些类似的问题,为了获得动态数据,我需要
我现在卡在第2步,我发现一个名为15258543的XHR包含评级分布,但我不知道如何发送请求以获取json。喜欢在哪里使用什么参数。
有人可以带我走过这个吗? 谢谢!
答案 0 :(得分:2)
最棘手的是动态获取15258543
产品ID,然后在网址中使用它来获取评论。此产品ID可以在产品页面的多个位置找到,例如,我们可以使用meta
元素:
<meta itemprop="productID" content="15258543">
这是一个工作的蜘蛛,它发出单独的GET请求来获取评论,通过json.loads()
加载JSON响应并打印整体产品评级:
import json
import scrapy
class TargetSpider(scrapy.Spider):
name = "target"
allowed_domains = ["target.com"]
start_urls = ["http://www.target.com/p/bounty-select-a-size-paper-towels-white-8-huge-rolls/-/A-15258543#prodSlot=medium_1_4&term=bounty"]
def parse(self, response):
product_id = response.xpath("//meta[@itemprop='productID']/@content").extract_first()
return scrapy.Request("http://tws.target.com/productservice/services/reviews/v1/reviewstats/" + product_id,
callback=self.parse_ratings,
meta={"product_id": product_id})
def parse_ratings(self, response):
data = json.loads(response.body)
print(data["result"][response.meta["product_id"]]["coreStats"]["AverageOverallRating"])
打印4.5585
。