2016-05-07 51 views
2

我在Python 3中有以下代码。我正在使用import xml.etree.ElementTree as ET进行XML解析。 webScraper从网页抓取文本,但在该网站上有<link></link>标记之间的文本,但程序返回无。我可以认为程序找到了所有的标签,但是标签结果应该打印的地方只有None。Python3 XML在标签之间获取文本

result = webScrapper.scrappPart("http://www.dn.se/rss/senaste-nytt/", "body") 
    root = ET.fromstring(result) 
    for items in root.findall('.//item'): 
     link = items.find('link') 
     print(link.text) 

有谁知道如何解决这个问题?

+0

'link' none? –

+0

什么是'webScrapper.scrappPart()'?它是否返回转换后的XML的XML或HTML? (因为它提到了“body”,而在XML源代码中没有'',猜测太远了?) – har07

回答

3

由于您的网址实际上是一个RSS提要,因此您最好使用RSS提要解析器,而不是尝试自己推出。幸运的是,这就是为什么存在feedparser。检查了这一点:

import feedparser as fp 

feed = fp.parse("http://www.dn.se/rss/senaste-nytt/") 
for entry in feed["entries"]: 
    print(entry["link"]) 

这将返回

http://www.dn.se/sport/fotboll/cavani-het-i-svalt-psg/ 
http://www.dn.se/sport/fotbolls-em/kompany-missar-em/ 
http://www.dn.se/nyheter/sverige/livvaktens-slakting-fick-praktik-hos-sahlin-trots-myndighetens-avslag/ 
http://www.dn.se/sport/st-louis-andraperiod-avgjorde/ 
http://www.dn.se/nyheter/varlden/syrien-spanska-journalister-fria/ 
http://www.dn.se/sport/dansk-dynamit-ska-stoppa-tre-kronor/ 
http://www.dn.se/nyheter/sverige/mordmisstankt-slappt-ur-haktet-1/ 
http://www.dn.se/nyheter/varlden/ekonomiprofessor-loste-ekvation-togs-for-terrorist/ 
http://www.dn.se/sport/fotboll/leicester-firade-med-storseger/ 
http://www.dn.se/ekonomi/protester-mot-ny-granskontroll-urartade/ 
http://www.dn.se/sport/ishockey-vm/jimmie-ericsson-jag-ar-beredd-gora-allt-for-att-vinna/ 
http://www.dn.se/sport/ishockey-vm/schweiz-straffat-av-kazakstan/ 
http://www.dn.se/nyheter/varlden/natosoldater-dodade-i-afghanistan-2/ 
http://www.dn.se/sport/forsta-matchen-till-eslov/ 
http://www.dn.se/nyheter/sverige/drunknad-man-hittad-av-dykare/ 
http://www.dn.se/ekonomi/tagstopp-efter-olycka/ 
http://www.dn.se/sport/kristianstad-till-sm-final/ 
http://www.dn.se/sthlm/en-person-attackerad-med-kniv-i-centrala-stockholm/ 
http://www.dn.se/nyheter/sverige/inga-spar-efter-forsvunnen-22-arig-student/ 
http://www.dn.se/sport/fotboll/forlust-for-rydstrom-i-tranardebuten/ 
http://www.dn.se/nyheter/sverige/manga-grasbrander-runt-om-i-landet/ 
http://www.dn.se/nyheter/sverige/tre-gripna-efter-skottlossning-i-malmo/ 
http://www.dn.se/sport/fotboll/elfsborg-ar-med-i-toppen-igen/ 
http://www.dn.se/sport/em-silver-till-rissveds/ 

我以为是你在找什么。

1

您可以使用ElementTree就好了,你只需要通过源和使用XPath:

from xml.etree import ElementTree as et 
import requests 

tree = et.fromstring(requests.get("http://www.dn.se/rss/senaste-nytt/").content) 

print([x.text for x in tree.findall(".//item//link")]) 

输出:

['http://www.dn.se/nyheter/varlden/andlig-ledare-ihjalhackad-i-bangladesh/', 'http://www.dn.se/nyheter/sverige/tillstandet-battre-for-pakord-ettaring/', 'http://www.dn.se/ekonomi/maria-crofts-dags-att-gora-nagot-at-orattvisa-pensioner/', 'http://www.dn.se/nyheter/varlden/turkisk-militar-dodade-55-is-krigare/', 'http://www.dn.se/nyheter/varlden/massiv-fiskdod-i-sjo/', 'http://www.dn.se/nyheter/varlden/kanadabranden-i-bilder/', 'http://www.dn.se/nyheter/sverige/manga-saknas-efter-jordskred-i-kina/', 'http://www.dn.se/nyheter/sverige/fortsatt-sokande-efter-student/', 'http://www.dn.se/nyheter/sverige/en-dod-i-villabrand-8/', 'http://www.dn.se/nyheter/politik/v-vill-ta-bort-terrorstampel-pa-pkk/', 'http://www.dn.se/ekonomi/raknehjalp-pa-natet-ger-ratt-underhall/', 'http://www.dn.se/nyheter/varlden/kanadabranden-fullstandigt-okontrollerad/', 'http://www.dn.se/nyheter/varlden/attentat-mot-journalister-besvarande-for-erdogan/', 'http://www.dn.se/nyheter/varlden/superlobbyist-ska-gora-trump-serios/', 'http://www.dn.se/nyheter/vetenskap/karin-bojs-en-typisk-foralder-ar-28-ar-gammal/', 'http://www.dn.se/sport/nervos-vantan-pa-em-biljetter/', 'http://www.dn.se/ekonomi/ovantat-stort-exportfall-i-kina/', 'http://www.dn.se/ekonomi/lott-gav-35-miljarder-i-vinst-i-usa/', 'http://www.dn.se/nyheter/vetenskap/fabels-kansliga-nos-ska-ge-svar-om-massmordet/', 'http://www.dn.se/sport/johan-esk-nu-borde-idrotten-lara-ledarskap-av-naringslivet-1/', 'http://www.dn.se/sport/melker-karlsson-malskytt-for-san-jose/', 'http://www.dn.se/sport/backstrom-visade-vagen-till-washingtons-viktiga-vinst/', 'http://www.dn.se/nyheter/varlden/15-miljoner-signaturer-bekraftade/', 'http://www.dn.se/nyheter/varlden/medan-du-sov-varlden-i-korthet-8-maj-1/', 'http://www.dn.se/nyheter/varlden/karnvapen-bara-om-landet-hotas/', 'http://www.dn.se/nyheter/varlden/protester-mot-att-avskaffa-senat/', 'http://www.dn.se/nyheter/sverige/industri-brann-i-uppsala/', 'http://www.dn.se/nyheter/varlden/atta-poliser-dodade-i-attack/', 'http://www.dn.se/nyheter/varlden/tva-fast-vid-myr-utanfor-kiruna/', 'http://www.dn.se/sport/hockeyhasten-nyquist-vann-kentucky-derby/', 'http://www.dn.se/nyheter/varlden/15-miljoner-signaturer-bekraftade-i-venezuela/'] 

或者使用LXML也可以得到源为你:

from lxml import etree 

result = etree.parse("http://www.dn.se/rss/senaste-nytt/") 
print(result.xpath("//item//link//text()")) 

它给你完全相同的输出。