2014-03-25 136 views

回答

1

您可以使用BeautifulSoup

import bs4 

soup = bs4BeautifulSoup(html_content); 
result = soup.find("div", { "class" : "wikicontent", "id" : "wikicontentid" }) 
1

使用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>' 
0

下載網頁源使用,解析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 
相關問題