2013-04-02 49 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模塊文檔)。