我正在尝试从此Feed中提取数据:
http://realbusiness.co.uk/feed/
然而,它看起来与我正在提取的其他Feed不同。它们看起来像这样:
https://www.ft.com/companies?format=rss
当我从“https://www.ft.com/companies?format=rss”中提取数据时,一切都非常简单,因为我正在使用minidom切片数据并拉出我需要的所有内容,如下所示:
from xml.dom import minidom
from urllib.request import urlopen
url = 'https://www.ft.com/companies?format=rss&page=1'
html = urlopen(url)
dom = minidom.parse(html)
item = dom.getElementsByTagName('item')
for node in item:
pubdate = node.getElementsByTagName('pubDate')[0].childNodes[0].nodeValue
link = node.getElementsByTagName('link')[0].childNodes[0].nodeValue
title = node.getElementsByTagName('title')[0].childNodes[0].nodeValue
但是,当我尝试使用以下代码对“http://realbusiness.co.uk/feed/”执行相同的操作时:
from xml.dom import minidom
from urllib.request import urlopen
url = 'http://realbusiness.co.uk/feed/'
html = urlopen(url)
dom = minidom.parse(html)
我收到以下错误:
Traceback (most recent call last):
File "C:/Users/NAME/Desktop/Scripts/scrapesites/deleteme.py", line 6, in <module>
dom = minidom.parse(html)
File "C:\Python36\lib\xml\dom\minidom.py", line 1958, in parse
return expatbuilder.parse(file)
File "C:\Python36\lib\xml\dom\expatbuilder.py", line 913, in parse
result = builder.parseFile(file)
File "C:\Python36\lib\xml\dom\expatbuilder.py", line 207, in parseFile
parser.Parse(buffer, 0)
xml.parsers.expat.ExpatError: XML or text declaration not at start of entity: line 2, column 0
关于为什么会发生这种情况的结论是因为两个站点的rss结构略有不同。 “http://realbusiness.co.uk/feed/”在页面的第一行有一个“\ n”,而“https://www.ft.com/companies?format=rss”没有。
如何删除“\ n”以便我可以解析数据?
如果我对我的解决方案有误,那么正确的解决方案是什么?
提前致谢。
答案 0 :(得分:1)
在解析之前阅读\n
字符可能会有效:
html = urlopen(url)
html.read(1)
dom = minidom.parse(html)