python爬蟲--解析網頁幾種方法之BeautifulSoup
阿新 • • 發佈:2017-10-02
first div xml html find 抓取 XML 格式 速度慢 析取
一.解析器概述
soup=BeautifulSoup(response.body)
對網頁進行析取時,並未規定解析器,此時使用的是python內部默認的解析器“html.parser”。
解析器是什麽呢? BeautifulSoup做的工作就是對html標簽進行解釋和分類,不同的解析器對相同html標簽會做出不同解釋。
舉個官方文檔上的例子:
BeautifulSoup("<a></p>", "lxml") # <html><body><a></a></body></html>
BeautifulSoup("<a></p>", "html5lib") # <html><head></head><body><a><p></p></a></body></html>
BeautifulSoup("<a></p>", "html.parser") # <a></a>
官方文檔上多次提到推薦使用"lxml"和"html5lib"解析器,因為默認的"html.parser"自動補全標簽的功能很差,經常會出問題。
二、使用BeautifulSoup抓取新聞網站新聞標題。
import requests from bs4 import BeautifulSoup link = "http://tuijian.hao123.com/finance" headers = {‘User-Agent‘ : ‘Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6‘} r = requests.get(link, headers= headers) soup = BeautifulSoup(r.text,"html.parser") first_title = soup.find("div", class_="box-text").text print ("第一篇文章的標題是:", first_title) title_list = soup.find_all("div", class_="box-text") for i in range(len(title_list)): title = title_list[i].text.strip()print (‘第 %s 篇文章的標題是:%s‘ %(i+1, title))
find_all找到所有結果,結果是一個列表。用一個循環,把標題列出。
解析器 | 使用方法 | 優勢 | 劣勢 |
---|---|---|---|
Python標準庫 | BeautifulSoup(markup, “html.parser”) |
|
|
lxml HTML 解析器 | BeautifulSoup(markup, “lxml”) |
|
|
lxml XML 解析器 | BeautifulSoup(markup, [“lxml”, “xml”])BeautifulSoup(markup, “xml”) |
|
|
html5lib | BeautifulSoup(markup, “html5lib”) |
|
|
python爬蟲--解析網頁幾種方法之BeautifulSoup