2013-04-02 50 views
0

我有一个代码从ESPN NCAA网站提取头条新闻。但我想刮掉整个WEBPAGE。我是一个编程新手,所以如果你能帮助刮网页真的很感激。我发现很难理解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" 
+1

代码看起来不错。你有什么具体问题吗? – bernie

+0

是的。我想问的是,上面的代码只能提取标题。我如何使它提取网页中的所有文字? – user2237900

回答

0

您还可以通过使用html2text :)

+0

在大多数情况下,这可能无法正常工作。 –

+0

我该怎么做? – user2237900

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树中的文本内容时,将调用DeHTMLParser类的handle_data函数。该函数只是将该值附加到StringIO对象(未完成字符串连接以避免创建多个临时对象)。 text_from_html使用该类从字符串/ unicode获取文本(有关更多信息,请参见HTMLParser模块文档)。