这可能是一个非常初学的问题,但我没有收到错误,所以我不知道发生了什么。
这是我的代码:
# -*- coding: utf-8 -*-
import urllib2
from urllib2 import urlopen
import re
import cookielib
from cookielib import CookieJar
import time
cj = CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
opener.addheaders = [('User-agent', 'Mozilla/5.0')]
def main():
with open('word_list.txt') as f:
word_list = f.readlines()
try:
pages = open('rss_sources.txt').readlines()
for rss_resource in pages:
sourceCode = opener.open(rss_resource).read()
#print sourceCode
try:
titles = re.findall(r'<title>(.*?)</title>', sourceCode)
for title in titles:
if any(word.lower() in title.lower() for word in word_list):
print title
except Exception, e:
print str(e)
except Exception, e:
print str(e)
main()
我的示例RSS源是:
http://www.finanzen.de/news/feed http://www.welt.de/wirtschaft/?service=Rss
问题:第一个RSS源很好,它会打印出包含word_list.txt关键字的标题。现在,一旦我将第二个RSS源添加到.txt文件,我的输出就没有了,没有错误消息或任何东西。甚至没有第一个rss资源给我任何东西。
第二个资源有问题吗?我该如何处理这个错误?为什么第一个资源没有正确解析?
请指出我正确的方向,以便我可以照顾这个:)
答案 0 :(得分:1)
不要尝试使用正则表达式解析XML数据。使用知名库,例如feedparser
。
话虽如此,问题是你要覆盖for循环中的sourceCode
变量,以便它只使用最后一个值。缩进执行标题解析的try..except
块,使其位于for循环中,并且它应该可以正常工作。
答案 1 :(得分:0)
您是否尝试过使用requests
代替urllib
?此外,我建议使用BeautifulSoup
解析RSS资源生成的XML文档,这样可以简化提取和识别文档中每个标记所包含的内容的过程。例如,您的代码可以写成:
import requests
from bs4 import BeautifulSoup
r = requests.get('http://www.welt.de/wirtschaft/?service=Rss')
r.encoding = 'utf-8'
soup = BeautifulSoup(r.text)
titles = [t.text for t in soup.find_all('title')]
for title in titles:
#There goes your processing...