2014-10-23 2 views
0

Пытается разобрать this rss feed с помощью scrapy (0.16) консоль работает не так, как ожидалось, и я понятия не имею, что происходит не так. Кажется, только такие атрибуты, как @href доступны:xpath на xml rss-канал не работает должным образом

>>> fetch('http://www2c.cdc.gov/podcasts/feed.asp?feedid=183') 
2014-10-23 12:20:54-0400 [default] DEBUG: Crawled (200) <GET http://www2c.cdc.go 
v/podcasts/feed.asp?feedid=183> (referer: None) 
[s] Available Scrapy objects: 
[s] item  {} 
[s] request <GET http://www2c.cdc.gov/podcasts/feed.asp?feedid=183> 
[s] response <200 http://www2c.cdc.gov/podcasts/feed.asp?feedid=183> 
[s] settings <CrawlerSettings module=<module 'ebola.scraper.scrape.settings' 
from 'ebola\scraper\scrape\settings.pyc'>> 
[s] spider  <BaseSpider 'default' at 0x3efc130> 
[s] xxs  <XmlXPathSelector xpath=None data=u'<feed xmlns="http://www.w3. 
org/2005/Atom'> 
[s] Useful shortcuts: 
[s] shelp()   Shell help (print this help) 
[s] fetch(req_or_url) Fetch request (or URL) and update local objects 
[s] view(response) View response in a browser 
>>> xxs.select("//entry").extract() 
[] 
>>> xxs.select("//link").extract() 
[] 
>>> xxs.select("//link/text()").extract() 
[] 
>>> xxs.select("//title").extract() 
[] 
>>> xxs.select("//title/text()").extract() 
[] 
>>> xxs.select("//link/@href").extract() 
[] 
>>> xxs.select("//@href").extract() 
[u'http://www2c.cdc.gov/podcasts/feed.asp?feedid=183', u'http://www.cdc.gov/medi 
a/index.html', u'http://www2c.cdc.gov/podcasts/download.asp?af=h&f=8634459', u'h 
ttp://www.cdc.gov/media/releases/2014/images/p1022-post-arrival-monitoring-300x2 
00.jpg', u'http://www2c.cdc.gov/podcasts/download.asp?af=h&f=8634458', u'http:// 
www2c.cdc.gov/podcasts/download.asp?af=h&f=8634453', u'http://www2c.cdc.gov/podc 
asts/download.asp?af=h&f=8634436', u'http://www2c.cdc.gov/podcasts/download.asp? 
af=h&f=8634435', u'http://www2c.cdc.gov/podcasts/download.asp?af=h&f=8634434', u 
'http://www2c.cdc.gov/podcasts/download.asp?af=h&f=8634417', u'http://www2c.cdc. 
gov/podcasts/download.asp?af=h&f=8634403', u'http://www2c.cdc.gov/podcasts/downl 
oad.asp?af=h&f=8634373', u'http://www2c.cdc.gov/podcasts/download.asp?af=h&f=863 
4367', u'http://www2c.cdc.gov/podcasts/download.asp?af=h&f=8634365', u'http://ww 
w2c.cdc.gov/podcasts/download.asp?af=h&f=8634362', u'http://www2c.cdc.gov/podcas 
ts/download.asp?af=h&f=8634361', u'http://www2c.cdc.gov/podcasts/download.asp?af 
=h&f=8634355', u'http://www2c.cdc.gov/podcasts/download.asp?af=h&f=8634350', u'h 
ttp://www2c.cdc.gov/podcasts/download.asp?af=h&f=8634349', u'http://www2c.cdc.go 
v/podcasts/download.asp?af=h&f=8634330', u'http://www2c.cdc.gov/podcasts/downloa 
d.asp?af=h&f=8634329', u'http://www2c.cdc.gov/podcasts/download.asp?af=h&f=86343 
28', u'http://www2c.cdc.gov/podcasts/download.asp?af=h&f=8634325', u'http://www2 
c.cdc.gov/podcasts/download.asp?af=h&f=8634324', u'http://www2c.cdc.gov/podcasts 
/download.asp?af=h&f=8634322', u'http://www2c.cdc.gov/podcasts/download.asp?af=h 
&f=8634283', u'http://www2c.cdc.gov/podcasts/download.asp?af=h&f=8634278', u'htt 
p://www2c.cdc.gov/podcasts/download.asp?af=h&f=8634277', u'http://www2c.cdc.gov/ 
podcasts/download.asp?af=h&f=8634273', u'http://www2c.cdc.gov/podcasts/download. 
asp?af=h&f=8634265', u'http://www2c.cdc.gov/podcasts/download.asp?af=h&f=8634262 
', u'http://www2c.cdc.gov/podcasts/download.asp?af=h&f=8634250', u'http://www2c. 
cdc.gov/podcasts/download.asp?af=h&f=8634251', u'http://www.cdc.gov/media/DPK/20 
14/images/vs-crash-injuries/fb.jpg', u'http://www2c.cdc.gov/podcasts/download.as 
p?af=h&f=8634248', u'http://www2c.cdc.gov/podcasts/download.asp?af=h&f=8634234', 
u'http://www2c.cdc.gov/podcasts/download.asp?af=h&f=8634233', u'http://www2c.cd 
c.gov/podcasts/download.asp?af=h&f=8634225', u'http://www2c.cdc.gov/podcasts/dow 
nload.asp?af=h&f=8634224', u'http://www2c.cdc.gov/podcasts/download.asp?af=h&f=8 
634222', u'http://www2c.cdc.gov/podcasts/download.asp?af=h&f=8634221', u'http:// 
www2c.cdc.gov/podcasts/download.asp?af=h&f=8634323', u'http://www2c.cdc.gov/podc 
asts/download.asp?af=h&f=8634217', u'http://www2c.cdc.gov/podcasts/download.asp? 
af=h&f=8634214', u'http://www2c.cdc.gov/podcasts/download.asp?af=h&f=8634178', u 
'http://www2c.cdc.gov/podcasts/download.asp?af=h&f=8634174', u'http://www.cdc.go 
v/media/images/L2/p1002-smoke-free-housing.jpg', u'http://www2c.cdc.gov/podcasts 
/download.asp?af=h&f=8634173', u'http://www2c.cdc.gov/podcasts/download.asp?af=h 
&f=8634211', u'http://www2c.cdc.gov/podcasts/download.asp?af=h&f=8634164', u'htt 
p://www2c.cdc.gov/podcasts/download.asp?af=h&f=8634157', u'http://www2c.cdc.gov/ 
podcasts/download.asp?af=h&f=8634160', u'http://www2c.cdc.gov/podcasts/download. 
asp?af=h&f=8634161', u'http://www2c.cdc.gov/podcasts/download.asp?af=h&f=8634146 
', u'http://www2c.cdc.gov/podcasts/download.asp?af=h&f=8634073'] 
>>> 

Пожалуйста, имейте в виду изменения версии Scrapy не вариант, я заперт в 0.16 Любые идеи оценили ...

ответ

2

Когда вы смотрите на источник HTML в браузере, вы увидите, что исходный XML находится в пространстве имен в по умолчанию:

<feed xmlns="http://www.w3.org/2005/Atom"> 

Все потомки элементы feed также принадлежат к этому пространству имен - вот почему ваши селекторы не yiel d ничего. для одного выбора атрибута исключения:

Это только кажется, такие атрибуты, как @href являются , доступной

, поскольку атрибуты не принимать на пространстве имен по умолчанию - и остаются не в пространстве имен.


Если вы хотите Accesss элементы, которые находятся в пространстве имен, вы должны регистр указанное пространство имен первого и выберите префикс для него:

xxs.register_namespace("atom", "http://www.w3.org/2005/Atom") 

Затем префиксом элементы с atom: (или любой другой префикс):

xxs.select("//atom:link").extract() 

Найти дополнительную информацию в relevant section of the Scrapy documentation.

+0

Спасибо, миллион! – arctelix

Смежные вопросы