BeautifulSoup库的名字取自刘易斯·卡罗尔在《爱丽丝漫游仙境》里的同名诗歌。BeautifulSoup通过定位HTML标签来格式化和组织复杂的网络信息,用简单易用的python对象展现XML结构信息。

一、安装Beautifulsoup

1、windows平台

①安装pip(安装python3时选择安装)
②利用pip安装bs4——命令行模式:`pip install BeautifulSoup4

二、运行Beautifulsoup

解析本地网页

from bs4 import BeautifulSoup #bs4是BeautifulSoup4的简称

with open(r'E:\PycharmProjects\web_prase\new_index.html') as web_data:#利用open函数打开本地网页文件
    soup=BeautifulSoup(web_data.read(),'lxml')#利用lxml解析网页
    print(soup.h2)

输出结果为:

<h2>Article</h2>

解析在线网页

from bs4 import BeautifulSoup
import requests

url='https://cn.tripadvisor.com/Attractions-g60763-Activities-New_York_City_New_York.html'
web_data=requests.get(url)#利用requests库爬取在线网页
soup=BeautifulSoup(web_data.text,'lxml')
print(soup)

或者

from bs4 import BeautifulSoup
from urllib.request import urlopen

html=urlopen('https://cn.tripadvisor.com/Attractions-g60763-Activities-New_York_City_New_York.html')#利用urllib模块爬取在线网页
soup=BeautifulSoup(html.read(),'lxml')

三、可靠的网络连接

html=urlopen('https://cn.tripadvisor.com/Attractions-g60763-Activities-New_York_City_New_York.html')

这行代码主要可能会发生两种异常:

  1. 网页在服务器上不存在(或者获取页面的时候出现错误)
  2. 服务器不存在

第一种异常发生时,程序会返回HTTP错误。HTTP错误可能是“404 Page Not Found”、“500 Internal Sever Error”等。所有类似情形,urlopen都会抛出“HTTPError”异常。可以用下面的方式处理这种异常:

try:
    html=urlopen('https://cn.tripadvisor.com/Attractions-g60763-Activities-New_York_City_New_York.html')
except HTTPError as e:
    print(e)
    #返回空值,中断程序,或者执行另一个方案
else:
    #程序继续。

如果服务器不存在(就是说https://cn.tripadvisor.com/Attractions-g60763-Activities-New_York_City_New_York.html 打不开,或者URL链接写错了),urlopen会返回一个None对象。可以增加一个判断语句检测返回的html是不是None:

if html is None:
    print("URL is not found")
else:
    #程序继续

四、复杂HTML解析

从复杂的网页中寻觅信息时,在找到目标信息之前,需要“敲掉”网页上那些不需要的信息。

通过属性查找标签的方法

CSS可以让HTML元素呈现出差异化,使那些具有完全相同修饰的元素呈现出不同的样式。比如,有一些标签看起来是这样:

<span>class="green"</span>

而另一些标签看起来是这样:

<span>class="red"</span>

网络爬虫可以通过class属性的值,轻松地区分出两种不同的标签。

标签组的使用

标签解析树的导航过程