python爬虫--解析网页几种方法之BeautifulSoup

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python爬虫--解析网页几种方法之BeautifulSoup相关的知识,希望对你有一定的参考价值。

 

 

一.解析器概述

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的主要内容,如果未能解决你的问题,请参考以下文章

爬虫系列之第2章-BS&Xpath模块

python爬虫之真实世界中的网页解析

Python--开发简单爬虫

Python爬虫系列:判断目标网页编码的几种方法

python爬虫网页解析之parsel模块

Python爬虫系列之 xpath:html解析神器