Python 2.x 中如何使用beautifulsoup模块进行网页解析

1. 美丽汤(BeautifulSoup)模块介绍

BeautifulSoup是Python中常用的一个HTML和XML解析器,主要用于从网页中提取数据。BeautifulSoup可以通过搜索文档树来找到特定的元素。同时,它也可以修复一些不标准的HTML和XML文档,使得这些文档可以被其他解析器正确解析。

1.1 BeautifulSoup模块的安装

在使用BeautifulSoup之前,需要先安装该模块。使用pip install即可安装,如下:

pip install BeautifulSoup4

1.2 BeautifulSoup模块的基本用法

使用BeautifulSoup对网页进行解析时,需要将网页的HTML代码作为参数传入BeautifulSoup类中,如下:

from bs4 import BeautifulSoup

html_doc ="""

Document

This is a paragraph.

This is another paragraph.

"""

soup = BeautifulSoup(html_doc, 'html.parser')

上述代码中,将html_doc作为参数传入BeautifulSoup类中,返回一个BeautifulSoup对象。通过该对象,可以使用多个搜索方法,如find、find_all、select等达到从网页中提取数据的目的。

2. 使用BeautifulSoup模块解析网页

下面以爬取百度首页上的搜索框为例,介绍如何使用BeautifulSoup模块进行网页解析。

2.1 抓取网页HTML代码

使用urllib库抓取百度首页的HTML代码,如下:

import urllib.request

url = 'https://www.baidu.com/'

req = urllib.request.urlopen(url)

html_doc = req.read().decode('utf-8')

2.2 解析网页代码

将抓取到的HTML代码作为参数传入BeautifulSoup类中,使用select方法获取搜索框对应的HTML代码,如下:

soup = BeautifulSoup(html_doc, 'html.parser')

search_input = soup.select('.s_form [name="wd"]')[0]

上述代码中,通过.select()方法获取到搜索框对应的HTML代码,.s_form表示class为s_form的元素,[name="wd"]表示name属性为"wd"的元素。

2.3 输出结果

将获取到的结果输出出来,如下:

print(search_input)

运行以上代码,可以得到搜索框对应的HTML代码。

结果输出:

3. 使用BeautifulSoup模块解析HTML文档中的URL

在网页解析过程中,经常需要从HTML文档中提取URL。下面以爬取Python官网中的新闻链接为例,介绍如何使用BeautifulSoup模块解析HTML文档中的URL。

3.1 抓取网页HTML代码

使用urllib库抓取Python官网首页的HTML代码,如下:

import urllib.request

url = 'https://www.python.org/'

req = urllib.request.urlopen(url)

html_doc = req.read().decode('utf-8')

3.2 解析HTML文档中的URL

将抓取到的HTML代码作为参数传入BeautifulSoup类中,使用find_all方法查找所有的a标签,进而获取到其中的href属性,如下:

soup = BeautifulSoup(html_doc, 'html.parser')

urls = []

for link in soup.find_all('a'):

url = link.get('href')

urls.append(url)

上述代码中,通过循环遍历所有的a标签,通过.get()方法获取href属性的值,然后将这些URL保存在列表urls中。

3.3 输出结果

将获取到的结果输出出来,如下:

for url in urls:

print(url)

运行以上代码,可以得到Python官网中所有链接的URL。

结果输出:

# https://twitter.com/ThePSF

# https://www.facebook.com/pythonlang?fref=ts

# ...

# https://status.python.org/

# http://www.python.org/psf/donations/gef/

后端开发标签