如果我有這樣的劃分:如何從python的html文件中移除除了選定標籤之外的所有內容?
<div class="wikicontent" id="wikicontentid">
我如何可以使用Python打印只是標籤和它的內容是什麼?
如果我有這樣的劃分:如何從python的html文件中移除除了選定標籤之外的所有內容?
<div class="wikicontent" id="wikicontentid">
我如何可以使用Python打印只是標籤和它的內容是什麼?
您可以使用BeautifulSoup:
import bs4
soup = bs4BeautifulSoup(html_content);
result = soup.find("div", { "class" : "wikicontent", "id" : "wikicontentid" })
使用Beautiful Soup模塊。
>>> import bs4
假設我們有一個包含若干個的div,一些匹配類和部分匹配該ID和一個沒有兩個文件:
>>> html = '<div class="wikicontent">blah1</div><div class="wikicontent" id="wikicontentid">blah2</div><div id="wikicontentid">blah3</div>'
我們可以用美麗的湯解析:
>>> soup = bs4.BeautifulSoup(html)
要找到所有的div:
>>> soup.find_all('div')
[<div class="wikicontent">blah1</div>, <div class="wikicontent" id="wikicontentid">blah2</div>, <div id="wikicontentid">blah3</div>]
這是一個bs4.element.ResultSet
,其中包含三個bs4.element.Tag
,您可以通過[]
運算符提取它。
應有盡有匹配給定的ID,使用id
關鍵字參數:
>>> soup.find_all(id='wikicontentid')
[<div class="wikicontent" id="wikicontentid">blah2</div>, <div id="wikicontentid">blah3</div>]
要匹配類,使用class_
關鍵字參數(注意下劃線):
>>> soup.find_all(class_='wikicontent')
[<div class="wikicontent">blah1</div>, <div class="wikicontent" id="wikicontentid">blah2</div>]
你可以將這些選擇器組合在一個調用中:
>>> soup.find_all('div', class_='wikicontent', id='wikicontentid')
[<div class="wikicontent" id="wikicontentid">blah2</div>]
如果你知道只有一個匹配或者如果你只在第一場比賽感興趣,使用soup.find
:正如前面
>>> soup.find(class_='wikicontent', id='wikicontentid')
<div class="wikicontent" id="wikicontentid">blah2</div>
,這不是一個字符串,
>>> type(soup.find('div', class_='wikicontent', id='wikicontentid'))
<class 'bs4.element.Tag'>
,但你可以打開它變成一個:
>>> str(soup.find('div', class_='wikicontent', id='wikicontentid'))
'<div class="wikicontent" id="wikicontentid">blah2</div>'
下載網頁源使用,解析HTML/CSS標籤使用http://lxml.de/。
import requests
import lxml.html
dom = lxml.html.fromstring(requests.get('http://theurlyourscraping.com').content)
wikicontent = [x for x in dom.xpath('//div[@class="wikicontent"]/text()')]
print wikicontent