在没有任何输出的情况下解析RSS资源

时间:2015-12-17 22:08:16

标签: python xml rss

这可能是一个非常初学的问题,但我没有收到错误,所以我不知道发生了什么。

这是我的代码:

# -*- 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资源给我任何东西。

第二个资源有问题吗?我该如何处理这个错误?为什么第一个资源没有正确解析?

请指出我正确的方向,以便我可以照顾这个:)

2 个答案:

答案 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...
相关问题