2015-10-27 3 views
0

Я использую scrapy для очистки информации с веб-сайта в python, и я только привык к использованию Xpaths для поиска информации.Python. Scrapy Xpath возвращает пустой массив

Я хочу вернуть список всех средних оценок от альбомов этого исполнителя с этой страницы. https://rateyourmusic.com/artist/kanye_west

Чтобы найти узел для альбомов, которые я использовал //div[@id="disco_type_s"] , и я попытался найти детей для дивы с атрибутом disco_avg_rating использованием div[@class="disco_avg_rating"]/text()

Вот моя функция

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 

Все, что я пытаюсь получить этот список вызывает проблемы. Обычно это более прямолинейно, но на этот раз мне приходится различать альбомы и синглы и т. Д., Поэтому у меня возникают проблемы.

Цените свою помощь, я довольно новичок в веб-соскабливании.

ответ

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

0

должно работать.

def parse_dir_contents(self, response): 
for i in response.xpath('//*[@class="disco_release"]/div[3]'): 
    item['average rating']=i.xpath('text()').extract() 
    yield item