0

我有一个从 ESPN NCAA 网站提取标题的代码。但我想刮掉整个网页。我是编码新手,如果您能帮助抓取网页,我将不胜感激。我发现很难理解 XML 标记并识别它们。请你们中的任何人修改此代码,以便打印此网页上的全部或大部分内容吗?谢谢!

from urllib import urlopen
from BeautifulSoup import BeautifulSoup
import smtplib


site = urlopen('http://espn.go.com/college-football').read()
soup = BeautifulSoup(site)    


for i in soup.findAll('ul', {'class': 'headlines'}):
    for tag in i.findAll('li'):
        for a in tag.findAll({'a' : True, 'title' : False}):            
            print a.text
            print a['href']                                
            print "\n"
4

2 回答 2

0

如果您只想提取文本内容,可以使用继承自HTMLParser(来自标准库)的类:

from HTMLParser import HTMLParser
from StringIO import StringIO                                                             

class DeHTMLParser(HTMLParser):
    def __init__(self):
        HTMLParser.__init__(self)
        self.text = StringIO()
    def handle_data(self, data):
        self.text.write(data.strip())

def text_from_html(html):
    parser = DeHTMLParser()
    parser.feed(html)
    parser.close()
    return parser.text.getvalue()

当遇到 HTML 树中的文本内容时调用该类的handle_data函数。DeHTMLParser这些函数只是将值附加到一个StringIO对象(不进行字符串连接以避免创建多个临时对象)。使用text_from_html该类从字符串/unicode 中获取文本(查看HTMLParser模块文档以获取更多信息)。

于 2013-04-02T21:28:13.587 回答
0

您也可以使用html2text作弊:)

于 2013-04-02T21:20:02.480 回答