scrapy shell 'https://itunes.apple.com/us/album/no-tears-left-to-cry/1374085537?i=1374087460&v0=WWW-NAUS-ITSTOP100-SONGS&l=en&ign-mpt=uo%3D4'
我想从这里获得专辑“泪流满面-Single”,
Itunes chart _ music preview page "no tears left to cry - Single / Ariana Grande"
相册名称的xpath是这样的:
//*[@id="ember653"]/section[1]/div/div[2]/div[1]/div[2]/header/h1
我试图
response.xpath('//*[@id="ember653"]/section[1]/div/div[2]/div[1]/div[2]/header/h1')
但结果是[]
如何从此wepsite获取相册信息?
答案 0 :(得分:0)
这是因为scrapy不要等待javascript加载,您需要使用scrapy-splash
和scrapy-splash,here is my answer how you need to setup scrapy-project
如果我使用scrapy-splash
,我会得到结果
2018-06-30 20:50:21 [scrapy.core.engine] DEBUG: Crawled (200) <GET https://itunes.apple.com/us/album/no-tears-left-to-cry/1374085537?i=1374087460&v0=WWW-NAUS-ITSTOP100-SONGS&l=en&ign-mpt=uo%3D4%27 via http://localhost:8050/render.html> (referer: None)
2018-06-30 20:50:21 [scrapy.core.scraper] DEBUG: Scraped from <200 https://itunes.apple.com/us/album/no-tears-left-to-cry/1374085537?i=1374087460&v0=WWW-NAUS-ITSTOP100-SONGS&l=en&ign-mpt=uo%3D4%27>
{'title': 'no tears left to cry - Single'}
这是我简单的蜘蛛
import scrapy
from scrapy_splash import SplashRequest
class TestSpider(scrapy.Spider):
name = "test"
start_urls = ['https://itunes.apple.com/us/album/no-tears-left-to-cry/1374085537?i=1374087460&v0=WWW-NAUS-ITSTOP100-SONGS&l=en&ign-mpt=uo%3D4%27']
def start_requests(self):
for url in self.start_urls:
yield SplashRequest(url=url,
callback=self.parse,
endpoint='render.html',
)
def parse(self, response):
yield {'title': response.xpath('//*[@id="ember653"]/section[1]/div/div[2]/div[1]/div[2]/header/h1//text()').extract_first()}
您也可以使用scrapy shell
scrapy shell 'http://localhost:8050/render.html?url=https://itunes.apple.com/us/album/no-tears-left-to-cry/1374085537?i=1374087460&v0=WWW-NAUS-ITSTOP100-SONGS&l=en&ign-mpt=uo%3D4'
In [2]: response.xpath('//*[@id="ember653"]/section[1]/div/div[2]/div[1]/div[2]/header/h1//text()').extract_first()
Out[2]: 'no tears left to cry - Single'
答案 1 :(得分:0)
您最好避免JS渲染,该渲染太慢,繁琐且容易出错。 在Chrome的“网络”标签上花费5分钟,以查找数据源。它通常内置在页面源中或通过XHR请求传递。
在这种情况下,所需的所有数据都可以在页面本身上找到,但是您应该检查其源代码,而不是呈现的版本。在Chrome中使用ctrl+u
,然后在ctrl+f
中查找所有需要的部分。
import json
track_data = response.xpath('//script[@name="schema:music-album"]/text()').extract_first()
track_json = json.loads(track_data)
track_title = track_json['name']
yield {'title': track_title}
在这种情况下将可以解决问题,并且比splash
的速度快约5-7倍