1. 程式人生 > >python爬蟲--解析網頁幾種方法之BeautifulSoup

python爬蟲--解析網頁幾種方法之BeautifulSoup

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”)
  • Python的內置標準庫
  • 執行速度適中
  • 文檔容錯能力強
  • Python 2.7.3 or 3.2.2)前 的版本中文檔容錯能力差
lxml HTML 解析器 BeautifulSoup(markup, “lxml”)
  • 速度快
  • 文檔容錯能力強
  • 需要安裝C語言庫
lxml XML 解析器 BeautifulSoup(markup, [“lxml”, “xml”])BeautifulSoup(markup, “xml”)
  • 速度快
  • 唯一支持XML的解析器
  • 需要安裝C語言庫
html5lib BeautifulSoup(markup, “html5lib”)
  • 最好的容錯性
  • 以瀏覽器的方式解析文檔
  • 生成HTML5格式的文檔
  • 速度慢

python爬蟲--解析網頁幾種方法之BeautifulSoup