2015-09-26 227 views
0

因此,我的代碼從URL中檢索HTML文件並將其保存爲文本文檔。查找從關鍵字到關鍵字的字符串部分

urllib.urlretrieve("http://www.testlink.com", "example.txt") 
retrieve = open("example.txt", "r") 

然後,我希望它從包含關鍵字的行中拉出特定的文本。該字符串應該是這樣的:

<b class="whb">This is the text I want to retrieve</b> This is additional text that I don't want. 

目前,我的代碼打印整行,像這樣:

for line in retrieve.readlines(): 
    if '<b class="whb">' in line: 
     print line 

如何指定要打印的一條線的一部分?我想要什麼之間b class =「whb」和/ b。

謝謝。

+1

使用一個html解析器,然後拉出所有具有類whb的'b'標籤。您可以使用標準庫中的[HtmlParser類](https://docs.python.org/2.7/library/htmlparser.html#module-HTMLParser)輕鬆完成此操作。 – ekhumoro

+0

@ekhumoro下面的文檔的代碼片段沒有奏效。無法結合str和文件對象 –

+1

我會使用[BeautifulSoup](http://www.crummy.com/software/BeautifulSoup/bs4/doc/)。不要重新發明輪子! – jorgeh

回答

1

正如我在評論中所說,我會用BeautifulSoup。這裏有一個小例子:

from bs4 import BeautifulSoup 

html_doc = "<b class='whb'>This is the text I want to retrieve</b> This is additional text that I don't want." 

soup = BeautifulSoup(html_doc, 'html.parser') 

print soup.b.text 

如果你有一個html_doc是與幾個<b>標籤較大的HTML文檔,你可以替換最後一行:

print soup.find("b", {"class":"whb"}).text 

如果html_doc有多個<b class='whb'>選項卡,並你希望他們所有的,然後用findAll()

all_bs = [b.text for b in soup.findAll("b", {"class":"whb"})] 

BeautifulSoup是一個真棒全featur ed web-scraper。請閱讀documentation找到你需要在你的具體情況。

+0

我忘了提及這個(對不起!!):我想要每一個等等等等等等等等。你的代碼打印出第一個實例。我如何得到這個的每個實例? –

+0

我把我的實際代碼放在GitHub上:[link](https://github.com/Ph0enix0/WikiBot/tree/master) –

+0

如果你想要每個實例,你可以使用BeautifulSoup的findAll()方法。例如。 'all_bs = [b.text for b在soup.findAll(「b」,{「class」:「whb」})]'。我剛剛更新了我的答案以包含此內容。 – jorgeh