2016-11-30 58 views
0

我正在做一個Python項目,我們應該從一個Project Gutenberg文件解析HTML以隔離該書的內容。我設法擺脫了除目錄之外的所有內容。我想通過將soup.prettify()作爲一個字符串對象,將它拆分到目錄的最後一個短語中,並將最後一個元素從列表中拉出來除去目錄,這將成爲除表格以外的所有內容的內容。這是我迄今爲止所擁有的。解析時,如何分割字符串對象然後拉出最後一個元素(Python)

def get_text(): #writes the html into a new text file called new_christie.txt 
     with open('new_christie.txt','w', encoding='utf-8') as book: 
     url = 'http://www.gutenberg.org/files/1155/1155-h/1155-h.htm' 
     r = requests.get(url) 
     data = r.text 
     soup = BeautifulSoup(data, 'html.parser') 
     str = soup.prettify() 
     text = str.split('XXVIII.  AND AFTER') #last phrase in Table of Contents 
     text = soup.find_all('p') #finds all of the text between paragraphs 
     content = text[-1:] 
     for p in content: 
      line = p.get_text() 
      book.write(line) 

我想我的問題在於,當我嘗試將最後一個元素拉出來使用內容列表的文本= [-1:],但我不能想出另一種方式來做到這一點。

+0

你有沒有嘗試使用剛剛'文[-1]'沒有冒號 – Navidad20

+0

當我想的是,它刪除了所有文本。 – Alanan

+0

此外,您選擇的字符串是否爲所有Gutenberg條目中發現的常量?或者您的解決方案僅適用於幾個看起來像這樣的條目? – CAB

回答

0

我提供這個解決方案,除了注意我使用lxml而不是美麗的湯,因爲我知道它更好。我不記得它是否是本地安裝的,但您可以在終端中使用pip install lxml進行安裝。

import requests 
from lxml import html 

def get_text(): 
    with open('new_christie.txt','w') as book: 
     url = 'http://www.gutenberg.org/files/1155/1155-h/1155-h.htm' 
     r = requests.get(url) 
     data = r.text 
     soup = html.fromstring(data.encode('utf8')) 
     text = ' '.join(soup.xpath('//p/text()')) 
     text = text.partition('AND AFTER')[2] 
     book.write(text) 
相關問題