这个网站的价格是如何呈现的?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了这个网站的价格是如何呈现的?相关的知识,希望对你有一定的参考价值。
我需要一个蜘蛛来抓取这个网站():
我希望抓取工具下载此页面的产品信息(https://search.suning.com/iphone/),包括价格,但我无法直接从此页面获取。似乎这个页面的价格是异步呈现的,但我找不到它是如何执行的。有人能帮我吗?谢谢。
我在Chrome开发者工具中检查了网络面板但找不到它。
# just example , not done
class SuningSpider(scrapy.Spider):
name = "sn"
keyWord = "笔"
prefix = "https://"
def start_requests(self):
yield scrapy.Request(url="https://search.suning.com/%s/" % self.keyWord, callback=self.parse)
def parse(self, response):
logging.error(response.text)
selector = scrapy.Selector(response)
productLists = selector.xpath("//div[@id='product-list']/ul/li")
for p in productLists:
deatailUrl = p.css("div > div > div.res-info > div.title-selling-point > a::attr(href)")
# price = p.css("div > div > div.res-info > div.price-box > span > i:nth-child(1)::text")
s.xpath('//*[@id="0070130312-164968740"]/div/div/div[2]/div[1]/span/i[2]')
# //div[contains(@class,'foo')]
fullUrl = self.prefix + deatailUrl
yield scrapy.Request(url=deatailUrl, callback=)
def crawlDetailPage(self, response):
selector = scrapy.Selector(response)
price = selector.xpath('//*[@id="mainPrice"]/dl[1]/dd/span')
def finished(self, response):
item = DataItem()
item["url"] = response.url
selector = scrapy.Selector(response)
price = selector.xpath("")
答案
价格与javascript回调(jsonp
)异步呈现,您将看到这些请求发布到ds.suning.com
。通过更改请求的URL,您可以获得普通的json。当您向下滚动页面时会调用它们,因此您需要使用产品的urls
动态构建这些ids
。
这为您提供了页面上前5个元素的价格:
from bs4 import BeautifulSoup
import requests
import json
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:66.0) Gecko/20100101 Firefox/66.0'}
with requests.Session() as s:
baseurl = 'https://ds.suning.com/ds/generalForTile/000000010606656239_,000000000690128135_,000000010606649857_,000000010597840415_,000000010597840391_-010-2-0000000000-1--ds0000000002391.json'
url_fetch = s.get(baseurl, headers=headers).json()
print([rs['price'] for rs in url_fetch['rs']])
#['5588.00', '5988.00', '7188.00', '7688.00', '5188.00']
以上是关于这个网站的价格是如何呈现的?的主要内容,如果未能解决你的问题,请参考以下文章
如何在created()或mounted()中有条件地呈现JS
如何使用列表视图在选项卡式活动的片段中呈现 SQLite 表数据 [重复]