web-crawling - 从 bandcamp.com 得到 item-title
web-crawling - get item-title from bandcamp.com
我尝试从页面的 'Discover' 部分(摇滚->所有摇滚->新品)bandcamp.com 的新版本中获取 item-title
scrapy shell 'https://bandcamp.com/?g=rock&s=new&p=0&gn=0&f=all&w=0'
页面的部分相关源代码如下所示:
<div class="col col-3-12 discover-item">
<a data-bind="click: playMe, css: { 'playing': playing }" class="item-link playable">
<span class="item-img ratio-1-1">
<img class="art" data-bind="src_art: { 'art_id': artId, 'format': 'art_tags_large' }" src="https://f4.bcbits.com/img/a1631562669_9.jpg">
<span class="plb-btn">
<span class="plb-bg"></span>
<span class="plb-ic"></span>
</span>
</span>
</a><a data-bind="attr: { 'href': itemURL }, text: title, click: playMe" class="item-title" href="https://reddieseloff.bandcamp.com/album/dead-rebel?from=discover-new">Dead Rebel</a>
<a data-bind="attr: { 'href': bandURL }, text: artist, click: playMe" class="item-artist" href="https://reddieseloff.bandcamp.com?from=discover-new">Red Diesel</a>
<span class="item-genre" data-bind="text: genre">rock</span>
</div>
我试图在 xpath 的帮助下获取 item-title 的文本(在此示例中为 'Dead Rebel'):
response.xpath('//div[@class="col col-3-12 discover-item"]//a[@class="item-title"]/text()').extract()
但它 returns 没什么。
[]
它也不适用于 'item-artist' 所以我想知道我做错了什么。
感谢任何帮助。
您查找的所有数据都隐藏在页面主体内的隐藏 div
节点中。
当您的浏览器加载网页时,javascript 指示如何解压缩和显示此数据,并且由于 scrapy 没有 运行 任何您需要自己执行此步骤的 javscript:
# all of the data is under "<div id="pagedata" data-blob=" attribute
data = response.css('div#pagedata::attr(data-blob)').extract()
import json
data = json.loads(data[0])
# dig through this python dictionary to find your data
(it has pretty much everything, even more than the page displays)
我尝试从页面的 'Discover' 部分(摇滚->所有摇滚->新品)bandcamp.com 的新版本中获取 item-title
scrapy shell 'https://bandcamp.com/?g=rock&s=new&p=0&gn=0&f=all&w=0'
页面的部分相关源代码如下所示:
<div class="col col-3-12 discover-item">
<a data-bind="click: playMe, css: { 'playing': playing }" class="item-link playable">
<span class="item-img ratio-1-1">
<img class="art" data-bind="src_art: { 'art_id': artId, 'format': 'art_tags_large' }" src="https://f4.bcbits.com/img/a1631562669_9.jpg">
<span class="plb-btn">
<span class="plb-bg"></span>
<span class="plb-ic"></span>
</span>
</span>
</a><a data-bind="attr: { 'href': itemURL }, text: title, click: playMe" class="item-title" href="https://reddieseloff.bandcamp.com/album/dead-rebel?from=discover-new">Dead Rebel</a>
<a data-bind="attr: { 'href': bandURL }, text: artist, click: playMe" class="item-artist" href="https://reddieseloff.bandcamp.com?from=discover-new">Red Diesel</a>
<span class="item-genre" data-bind="text: genre">rock</span>
</div>
我试图在 xpath 的帮助下获取 item-title 的文本(在此示例中为 'Dead Rebel'):
response.xpath('//div[@class="col col-3-12 discover-item"]//a[@class="item-title"]/text()').extract()
但它 returns 没什么。
[]
它也不适用于 'item-artist' 所以我想知道我做错了什么。
感谢任何帮助。
您查找的所有数据都隐藏在页面主体内的隐藏 div
节点中。
当您的浏览器加载网页时,javascript 指示如何解压缩和显示此数据,并且由于 scrapy 没有 运行 任何您需要自己执行此步骤的 javscript:
# all of the data is under "<div id="pagedata" data-blob=" attribute
data = response.css('div#pagedata::attr(data-blob)').extract()
import json
data = json.loads(data[0])
# dig through this python dictionary to find your data
(it has pretty much everything, even more than the page displays)