2015-10-22 4 views
1

Для некоммерческого назначения колледжа Я пытаюсь очистить данные с веб-сайта www.rateyourmusic.com, используя структуру scrapy на python, у меня был небольшой успех, так как я смог очистить имя художник с страницы художника, но xpath для другой информации (дата рождения, национальность) мне сложно скрестить. кто-нибудь из вас знает, какой будет правильный xpath для этих объектов? вот мой метод синтаксического анализа, который, по крайней мере, работал для имени исполнителя.Python Scrapy 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 

здесь образец Адрес странице исполнителя Я выскабливание http://rateyourmusic.com/artist/kanye_west

+0

Снимите 'TD /' от два XPath, которые в настоящее время не работают. Затем они должны работать. – gtlambert

+0

Спасибо, что заметили, к сожалению, я уже пробовал это сделать, и это не сработало, я добавил td /, чтобы посмотреть, будет ли это иметь значение, будет ли разбор синтаксического разбора в два отдельных цикла? Я предположил, что мне придется, поскольку они находятся в разных частях источника страницы. – user3545370

+0

Ваша проблема заключается в том, что вы ретранслируете по виртуальному DOM (я думаю, вы смотрите в инспекторе, чтобы получить структуру HTML). Вы должны проверить реальный источник на странице. F.x. на странице нет тега tbody, но только в виртуальном DOM. –

ответ

2

Вот реальный фрагмент HTML у вас есть на странице (вы можете увидеть, если вы откроете страницу в качестве источника).

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

результат

'8 июня 1977,'

Чтобы получить в настоящее время Run suhc XPage (содержание 2-й строки в таблице)

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

результат

'Hidden Hills, CA, США'

+0

блестящий, работал как шарм, спасибо – user3545370