关于python:从BeautifulSoup中提取标签

Extracting Tags from BeautifulSoup

我正在尝试从http://feeds.reuters.com/~r/reuters/technologynews/~3/zyauzq5cbz0/story01.htm获取身体标签。

但是漂亮的汤找不到。这是因为无效的HTML吗?如果是的话,我怎么能阻止呢?

我还尝试使用pytidylib作为html错误的前缀(http://countergram.com/open-source/pytidylib/docs/index.html)

下面是一些代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
def getContent(url, parser="lxml"):
    request = urllib2.Request(url)  
    try:    
        response = opener.open(request).read()
    except:
        print 'EMPTY CONTENT',url
        return None
    doc, errors = tidy_document(response)
    return parse(url, doc)

def parse(url, response, parser="lxml"):
    try:
        soup = bs(response,parser)
    except UnicodeDecodeError as e:
        if parser=="lxml":
            return parse(url, response,"html5lib")
        else:
            print e,url
            print 'EMPTY CONTENT',url
            return None  

    body = soup.body
    ...

当我打印出汤时,我可以看到打开和关闭的身体标签,但在body=soup.body之后,我什么也得不到。

我使用的是python 2.7.3和beautifulsoup4它似乎与漂亮的soup3一起工作,但由于性能问题,我需要坚持使用bs4。


我终于让它运转起来了。代码如下:

1
2
3
4
5
6
7
8
9
import urllib2
from lxml import html

url ="http://www.reuters.com/article/2013/04/17/us-usa-immigration-tech-idUSBRE93F1DL20130417?feedType=RSS&feedName=technologyNews"
response = urllib2.urlopen(url).read().decode("utf-8")
test = html.fromstring(response)

for p in test.body.iter('p'):
    print p.text_content()