2017-09-08 50 views
1

我正在使用BeautifulSoup4的HTML頁面。 html文件確實包含頂部的request headers信息,我如何過濾掉?從原始文本Python忽略標題文本BeautifulSoup

這裏是html文件片段

WARC/1.0 
WARC-Type: response 
WARC-Date: 2012-02-17T03:07:46Z 
WARC-TREC-ID: clueweb12-0206wb-51-29582 
WARC-Record-ID: <urn:uuid:546b127c-040e-4dee-a565-3a3f6683f898> 
Content-Type: application/http; msgtype=response 
Content-Length: 29032 

HTTP/1.1 200 OK 
Cache-Control: private 
Connection: close 
Date: Fri, 17 Feb 2012 03:07:48 GMT 
Content-Length: 28332 
Content-Type: text/html; charset=utf-8 
Server: Microsoft-IIS/6.0 
X-Powered-By: ASP.NET 
X-AspNet-Version: 2.0.50727 
Set-Cookie:   chkvalues=ClmZLoF4xnHoBwiZnWFzYcCMoYB/fMxYfeeJl/zhlypgwivOzw6qnVBRWzf8f19O; expires=Wed, 15-Aug-2012 02:07:48 GMT; path=/ 
Set-Cookie: previous-category-id=11; expires=Fri, 17-Feb-2012 03:27:48 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

<html xmlns="http://www.w3.org/1999/xhtml" > 
<head id="ctl00_headTag"><title> 

我想提取<html></html>沒有別的之間的文本。當我嘗試做這樣的事情。

with codecs.open(file, 'r', 'utf-8', errors='ignore') as f: 
     contents = f.read() 
    soup = BeautifulSoup(contents, "lxml") 
    for script in soup.find_all(["script", "style"]): # to remove script style tags 
     script.extract() 
    try: 
     raw_text = soup.find('html').text.lower() 

    except AttributeError: 
     pprint('{0} file is empty'.format(file)) 

raw_text它填補了 "WARC/1.0\r\nWARC-Type: response\r\nWARC-Date: 2012-02-17T03:07:46Z....類似的信息,意味着它添加標題變爲raw_text

如何從原始文本中刪除標題。

回答

2

HTTP標頭與正文分開兩個換行符,因此您可以使用\r\n\r\n拆分數據。但是,您的文件包含請求和響應,並且可以更容易地將主體的開頭用作分隔符。

try: 
    contents = contents[contents.index('<!DOCTYPE'):] 
except ValueError: 
    contents = contents[contents.index('<html'):] 
soup = BeautifulSoup(contents, "lxml") 

一些HTML文檔可能沒有DOCTYPE聲明。在這種情況下,使用'<html'作爲索引,並將其全部包裝在try except區塊中。

0
'\n'.join([e for e in raw_text.split('\n') if (e and e[0]=="<")]) 

你可以使用這個列表解析,以確保每一行始於<