Feedparser returns 一个 SAXParseException
Feedparser returns a SAXParseException
我尝试使用 python 阅读 RSS 提要。我使用 feedparser,它适用于每个提要,除了一个:https://www.frenchweb.fr/feed
import feedparser
feed = feedparser.parse("https://www.frenchweb.fr/feed")
print(feed)
输出:
{
'feed': {},
'entries': [],
'bozo': 1,
'headers': {
'Date': 'Mon, 09 Oct 2017 08:04:31 GMT',
'Server': 'Apache',
'Vary': 'Cookie,Accept-Encoding',
'Expires': 'Thu, 19 Nov 1981 08:52:00 GMT',
'Cache-Control': 'no-store, no-cache, must-revalidate, post-check=0, pre-check=0',
'Pragma': 'no-cache',
'ETag': '"2be89b4a462dd6d1652745b6e69cfdac"',
'X-UA-Compatible': 'IE=edge',
'Link': '<https://www.frenchweb.fr/wp-json/>; rel="https://api.w.org/"',
'Content-Encoding': 'gzip',
'Content-Length': '13440',
'Connection': 'close',
'Content-Type': 'application/rss+xml; charset="UTF-8"'
},
'etag': '"2be89b4a462dd6d1652745b6e69cfdac"',
'href': 'https://www.frenchweb.fr/feed',
'status': 200,
'encoding': 'UTF-8',
'version': '',
'bozo_exception': SAXParseException('XML or text declaration not at start of entity',),
'namespaces': {}
}
如果在相同的代码中,我只是简单地获取,就可以了,我看到了内容:
web_page = requests.get(url, headers=headers, allow_redirects=True)
soup = BeautifulSoup(web_page.content, "html.parser")
print(soup)
输出:
<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
xmlns:atom="http://www.w3.org/2005/Atom"
xmlns:content="http://purl.org/rss/1.0/modules/content/"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:media="http://search.yahoo.com/mrss/"
xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
xmlns:wfw="http://wellformedweb.org/CommentAPI/">
<channel>
<title>FrenchWeb.fr</title>
...
有什么线索吗?
提要无效:文件开头有换行符。如果用文本编辑器下载的话可以看到:
1
2 <?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
3 xmlns:content="http://purl.org/rss/1.0/modules/content/"
4 xmlns:wfw="http://wellformedweb.org/CommentAPI/"
5 [...]
这是一个问题,因为 XML declaration must be on the first line。
如果您删除第一个换行符,就可以了!
{'bozo': 0,
'encoding': 'utf-8',
'entries': [{'author': 'FrenchWeb',
'author_detail': {'name': 'FrenchWeb'},
'authors': [{'name': 'FrenchWeb'}],
'comments': 'https://www.frenchweb.fr/barometre-annuel-de-lexperience-utilisateur-par-kameleoon/305311#respond',
'guidislink': False,
[...]
编辑一个解决方案
您可以这样删除第一个换行符:
import feedparser
import requests
url = "https://www.frenchweb.fr/feed"
headers = []
web_page = requests.get(url, headers=headers, allow_redirects=True)
content = web_page.content.strip() # drop the first newline (if any)
feed = feedparser.parse(content)
我尝试使用 python 阅读 RSS 提要。我使用 feedparser,它适用于每个提要,除了一个:https://www.frenchweb.fr/feed
import feedparser
feed = feedparser.parse("https://www.frenchweb.fr/feed")
print(feed)
输出:
{
'feed': {},
'entries': [],
'bozo': 1,
'headers': {
'Date': 'Mon, 09 Oct 2017 08:04:31 GMT',
'Server': 'Apache',
'Vary': 'Cookie,Accept-Encoding',
'Expires': 'Thu, 19 Nov 1981 08:52:00 GMT',
'Cache-Control': 'no-store, no-cache, must-revalidate, post-check=0, pre-check=0',
'Pragma': 'no-cache',
'ETag': '"2be89b4a462dd6d1652745b6e69cfdac"',
'X-UA-Compatible': 'IE=edge',
'Link': '<https://www.frenchweb.fr/wp-json/>; rel="https://api.w.org/"',
'Content-Encoding': 'gzip',
'Content-Length': '13440',
'Connection': 'close',
'Content-Type': 'application/rss+xml; charset="UTF-8"'
},
'etag': '"2be89b4a462dd6d1652745b6e69cfdac"',
'href': 'https://www.frenchweb.fr/feed',
'status': 200,
'encoding': 'UTF-8',
'version': '',
'bozo_exception': SAXParseException('XML or text declaration not at start of entity',),
'namespaces': {}
}
如果在相同的代码中,我只是简单地获取,就可以了,我看到了内容:
web_page = requests.get(url, headers=headers, allow_redirects=True)
soup = BeautifulSoup(web_page.content, "html.parser")
print(soup)
输出:
<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
xmlns:atom="http://www.w3.org/2005/Atom"
xmlns:content="http://purl.org/rss/1.0/modules/content/"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:media="http://search.yahoo.com/mrss/"
xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
xmlns:wfw="http://wellformedweb.org/CommentAPI/">
<channel>
<title>FrenchWeb.fr</title>
...
有什么线索吗?
提要无效:文件开头有换行符。如果用文本编辑器下载的话可以看到:
1
2 <?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
3 xmlns:content="http://purl.org/rss/1.0/modules/content/"
4 xmlns:wfw="http://wellformedweb.org/CommentAPI/"
5 [...]
这是一个问题,因为 XML declaration must be on the first line。
如果您删除第一个换行符,就可以了!
{'bozo': 0,
'encoding': 'utf-8',
'entries': [{'author': 'FrenchWeb',
'author_detail': {'name': 'FrenchWeb'},
'authors': [{'name': 'FrenchWeb'}],
'comments': 'https://www.frenchweb.fr/barometre-annuel-de-lexperience-utilisateur-par-kameleoon/305311#respond',
'guidislink': False,
[...]
编辑一个解决方案
您可以这样删除第一个换行符:
import feedparser
import requests
url = "https://www.frenchweb.fr/feed"
headers = []
web_page = requests.get(url, headers=headers, allow_redirects=True)
content = web_page.content.strip() # drop the first newline (if any)
feed = feedparser.parse(content)