【问题标题】:Python Scrapy Xpath?Python Scrapy Xpath?
【发布时间】:2015-10-22 12:49:40
【问题描述】:

对于一项非营利性大学作业,我正在尝试使用 python 中的 scrapy 框架从网站 www.rateyourmusic.com 抓取数据,我取得了一些成功,因为我已经能够抓取名称来自艺术家页面的艺术家,但其他信息(出生日期,国籍)的 xpath 对我来说很难刮。你们中有人知道这些对象的正确 xpath 是什么吗?这是我的解析方法,它至少适用于艺术家姓名。

def parse_dir_contents(self, response):
    item = rateyourmusicartist()

    for sel in response.xpath('//div/div/div/div/table/tbody/tr/td'):  
        item['dateofbirth'] = sel.xpath('td/text()').extract() #these two selectors aren't working
        item['nationality'] = sel.xpath('td/a/text()').extract()

    for sel in response.xpath('//div/div/div/div/div/h1'): 
        item['name'] = sel.xpath('text()').extract() #this is the one that works

    yield item

这是我正在抓取的艺术家页面的示例 URL http://rateyourmusic.com/artist/kanye_west

【问题讨论】:

  • 从两个当前不起作用的 XPath 中删除 td/。然后他们应该工作。
  • 感谢您的注意,不幸的是我已经尝试过这样做但没有成功,我添加了 td/ 以查看是否会有所作为,是否会在两个单独的 while 循环中进行解析有区别吗?我认为我必须这样做,因为它们位于页面源的不同部分
  • 您的问题是您在虚拟 DOM 上中继(我猜您查看检查器以获取 HTML 结构)。您必须检查页面上的真实来源。 F.x.页面上没有 tbody 标签,但只有在虚拟 DOM 中。

标签: python xml xpath scrapy scrapy-spider


【解决方案1】:

这是您在页面上拥有的 HTML 的真实 sn-p(如果您将页面作为源打开,则可以看到它)。

<table class="artist_info">
<tr><td><div class="info_hdr">Born</div> June 8, 1977, <a class="location" href="/location/Atlanta/GA/United States">Atlanta, GA, United States</a></td></tr>
<tr><td><div class="info_hdr">Currently</div><a class="location" href="/location/Hidden Hills/CA/United States">Hidden Hills, CA, United States</a></td></tr>
</table>

为了获得生日,运行 suhc xPage(表格第一行的内容)

//table[@class='artist_info']/tr[1]/td/text()

结果

'1977 年 6 月 8 日,'

为了当前运行 suhc xPage(表中第 2 行的内容)

//table[@class='artist_info']/tr[2]/td/a/text()

结果

'美国加利福尼亚州隐山'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-03
    • 1970-01-01
    • 1970-01-01
    • 2020-06-30
    • 1970-01-01
    相关资源
    最近更新 更多