【问题标题】:web-crawling - get item-title from bandcamp.comweb-crawling - 从 bandcamp.com 获取项目标题
【发布时间】:2017-03-28 17:30:55
【问题描述】:

我尝试从页面的“发现”部分(摇滚->所有摇滚->新来者)获取来自 bandcamp.com 新版本的项目标题

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()

但它什么也不返回。

 []

它也不适用于“item-artist”,所以我想知道我做错了什么。

感谢您的帮助。

【问题讨论】:

  • 你不习惯scrapy,但你能试试//a[@class="item-title"]吗?此外,使用bs4 和提供的html 我可以获得您想要的Dead Rebel 文本。你感兴趣吗?也许你可以混合一些bs4scrapy 代码...
  • @dot.Py bs4 与 scrapy 的 parsel 完全相同,因此不会有太大变化。

标签: xpath web-scraping scrapy scrapy-shell


【解决方案1】:

您查找的所有数据都隐藏在页面正文内的隐藏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)

【讨论】:

  • 这真的几乎什么都有。试图用 pprint 找出字典中的内容 from pprint import pprint out = open('dict.txt', 'w+') pprint(data, out)
  • 您可以使用json.dumps(data, indent=2) 将数据放入文件以“漂亮地打印到文件”,然后您可以使用一些文本编辑器甚至是专用于查看 json 树的软件来检查数据,例如例如这个在线的:jsonviewer.stack.hu
猜你喜欢
  • 2022-01-11
  • 2020-06-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-06
  • 1970-01-01
  • 2018-12-10
  • 1970-01-01
相关资源
最近更新 更多