您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關python爬蟲中html轉換樹形結構的示例,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
BeautifulSoup就是一個專門用來從html和xml文檔中提取數據的庫,現在的版本是bs4。除了BeautifulSoup之外,python還具有一些其它的庫,如HTMLParser等,作用都差不多。解析器結合正則表達式,很容易將我們所需要的內容提取出來。
首先安裝BeautifulSoup:
$pip install beautifulsoup4
在python環境下導入字符串,創建BeautifulSoup對象:
from bs4 import BeautifulSoup soup = BeautifulSoup(html_str, 'lxml', from_encoding='utf-8')
BeautifulSoup可以將復雜的html文檔轉化成樹形結構,每個節點都是pyhton對象,所有的對象可以歸納為4種:
Tag
NavigableString
BeautifulSoup
Comment
HtmlParser將要接收一個字符串,輸出data和新采集到的一些urls。之前寫過的add_new_urls()函數接受一個可迭代對象,所以這里新的urls我們采用集合的形式(也可采用列表的形式)返回,data采用字典的形式存儲并返回。
此外,我們觀察到,詞條內容中含有的鏈接為"/item/..."的形式,這并不是一個完整的url,要在前面加上“https://baike.baidu.com”進行補全,利用urlparse模塊可以很方便地完成這個任務(當然也可以使用拼接字符串的方式)。
下面就是HtmlParser的完整代碼:
''' ----------------------------------------------------------------- HtmlParser ''' import re #正則表達式模塊 import urlparse #用來拼接url from bs4 import BeautifulSoup class HtmlParser(object): def parser(self, page_url, html_cont): ''' 解析器主函數 parm page_url:一個url parm html_cont:網頁內容,格式為字符串 return: urls, 數據;格式為 set, dict ''' if page_url is None or html_cont is None: print "page_url is None" return #建立bs對象,使用html.parser進行解析 soup = BeautifulSoup(html_cont, 'html.parser', from_encoding='urf-8') print "soup established" #接下來分別調用兩個私有函數返回urls和data new_urls = self._get_new_urls(page_url, soup) print "new_urls get" new_data = self._get_new_data(page_url, soup) print "new_data get" return new_urls, new_data def _get_new_urls(self, page_url, soup): ''' 從頁面中抽取指向其他詞條的鏈接 parm page_url: 當前頁面url parm soup: beautifulsoup對象 return: 新url的set ''' new_urls = set() #根據正則表達式規則對頁面內的鏈接進行篩選,留下想要的鏈接 links = soup.find_all('a', href=re.compile(r'/item/.+')) for link in links: #每個link都是Tag對象,Tag對象的操作方法與字典相同 new_url = link['href'] #借助urljoin,可以很方便地拼接url new_full_url = urlparse.urljoin(page_url, new_url) new_urls.add(new_full_url) return new_urls def _get_new_data(self, page_url, soup): ''' 提取想要的數據 parm page_url: 當前頁面url parm soup: beautifulsoup對象 return: dict ''' #聲明字典 data = {} data['url'] = page_url data['title'] = soup.find('dd', class_='lemmaWgt-lemmaTitle-title').find('h2').get_text() data['summary'] = soup.find('div', class_='lemma-summary').get_text() return data
關于python爬蟲中html轉換樹形結構的示例就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。