python自带网页解析器_Python网页解析器BeautifulSoup4

一、简介

Beautiful Soup是一个可以从HTML或XML文件中提取数据的Python库.它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式.Beautiful Soup会帮你节省数小时甚至数天的工作时间.(摘自文档)

二、安装

打开命令行直接执行如下安装命令(要先安装好python)。pip 是一个Python 包管理工具,提供了对 Python 包的查找、下载、安装、卸载的功能,一般默认安装python都附带了这个工具,如果没有请先安装此工具

pip install beautifulsoup4

安装完成后在命令行输入python命令进入python执行环境,执行如下代码(表示引入beautifulsoup4库,注意这里大小写)

from bs4 import BeautifulSoup

回车后若无报错则表示安装成功

4e6c5f8abcc49eb4b6b635d1e02d2a80.png

三、使用案例

现在我们使用BeautifulSoup从网页源代码中解析出所有博主的姓名和博客地址,并保存为json文件。代码如下

# -*- coding: utf-8 -*-

from bs4 import BeautifulSoup

import re

path=r'C:\Users\syc\Desktop\work\xxxx.html'

htmlfile = open(path, 'r', encoding='utf-8')

htmlhandle = htmlfile.read()

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

txtName = "dataSource.txt"

f=open(txtName, "a+", encoding='utf8')

t=0

for item in soup.find_all('a', href = re.compile('https://www.xxxxxx.com/[^/]+/$')):

jsonData = r'{"name": "' + item.get_text() + r'","url": "'+ item['href']},'

f.write(jsonData)

t = t + 1

htmlfile.close()

print(t)

f.close()

代码逐行解读

/*2.x版本的py文件一般默认的是ASCII码,如果文件里有中文,运行时会出现乱码,因此,需要把文件编码类型改为utf-8的类型*/

# -*- coding: utf-8 -*-

/*引入安装好的bs4库*/

from bs4 import BeautifulSoup

/*引入re库,这是一个用于字符串匹配的python标准库*/

import re

/*下载好的网页源代码文件路径,r表示字符串按原文输出,无需对字符串内的特殊字符进行转义*/

path=r'C:\Users\syc\Desktop\work\xxxx.html'

/*open() 函数用于打开一个文件,创建一个 file 对象,此处r表示用只读方式打开*/

htmlfile = open(path, 'r', encoding='utf-8')

/*获取文件全部字节流*/

htmlhandle = htmlfile.read()

/*创建一个 BeautifulSoup 对象,指定解析器为html.parser*/

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

txtName = "dataSource.txt"

/*a+表示打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写*/

f=open(txtName, "a+", encoding='utf8')

t=0

/*寻找所有href值符合正则匹配的a节点,关于这里的参数可参考文档,有更多参数和方法帮助解析网页*/

for item in soup.find_all('a', href = re.compile('https://www.xxxxxx.com/[^/]+/$')):

/*item.get_text()表示获取节点中的文本值,item['href']表示获取节点中href的值*/

jsonData = r'{"name": "' + item.get_text() + r'","url": "'+ item['href']}'

f.write(jsonData)

t = t + 1

htmlfile.close()

print(t)

f.close()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值