蟒蛇。 Scrapy Xpath返回空数组

时间:2015-10-27 19:25:51

标签: python python-2.7 xpath web-scraping scrapy

我正在使用scrapypython中的网站获取信息,而我只习惯使用Xpath查找信息。

我想从此页面返回此艺术家的专辑的所有平均评分列表。 https://rateyourmusic.com/artist/kanye_west

要查找我使用的相册的节点//div[@id="disco_type_s"] 我尝试使用disco_avg_rating

在子项中搜索属性为div[@class="disco_avg_rating"]/text()的div

这是我的功能

def parse_dir_contents(self, response):
    item = rateyourmusicalbums() *ignore this

    for i in response.xpath('//div[@id="disco_type_s"]'):
        item['average rating']=i.xpath('div[@class="disco_avg_rating"]/text()').extract()
        yield item

我尝试获取此列表的所有内容都会导致问题。通常它更直,但这次我必须区分专辑和单曲等,所以我遇到了麻烦。

感谢您的帮助,我对网络抓取相当陌生。

2 个答案:

答案 0 :(得分:0)

response.xpath('//div[@id="disco_type_s"]')只找到一个标记(这是使用id匹配xpath时主要发生的情况,它们是唯一的)。要获得选择器列表,您应该使用以下内容:

response.xpath('//div[@id="disco_type_s"]/div[@class="disco_release"]')将匹配多个标记,因此您可以对这些标记进行迭代。

然后使用average rating

获取'./div[@class="disco_avg_rating"]/text()'

答案 1 :(得分:0)

以下情况应该有效。

mysql> show variables like 'socket';
+-----------------------------------------+-------------------------------+
| Variable_name                           | Value                         |
+-----------------------------------------+-------------------------------+
| socket                                  | /yourpath/mysql.sock          |
+-----------------------------------------+-------------------------------+
1 rows in set (0.00 sec)