爬虫-BeautifulSoup
bs4
Beautiful Soup是一个使从web页面获取信息变得容易的库。它位于HTML或XML解析器之上,提供了迭代、搜索和修改解析树的python风格。
需要将pip源设置为国内源:阿里源、豆瓣源、网易源等
-
Windows
- 打开文件资源管理
- 地址栏上面输入
%appdata%
- 在这里面新建一个文件夹
pip
- 在
pip
文件夹里面新建一个文件叫做pip.ini
,内容写如下即可1
2
3
4[global]
timeout = 6000
index-url = https://mirrors.aliyun.com/pypi/simple/
trusted-host = mirrors.aliyun.com
-
Linux
cd ~
mkdir ~/.pip
vi ~/.pip/pip.conf
- 编辑内容,和windows一模一样
安装
1 | pip install bs4 |
1 | pip install lxml |
bs4在使用时候需要的一个第三方库
简单使用
-
导入包
1
from bs4 import BeautifulSoup
-
使用方式
可以将一个html文档,转化为指定的对象,然后通过对象的方法或者属性去查找指定的内容
- 转化本地文件
1
soup = BeautifulSoup(open('本地文件'), 'lxml')
- 转化网络文件
1
soup = BeautifulSoup('字符串类型或者字节类型', 'lxml')
- 转化本地文件
-
根据标签名查找
1
soup.a # 只能找到第一个符合要求的标签
-
获取属性
1
2
3soup.a.attrs # 获取所有的属性和值,返回一个字典
soup.a.attrs['href'] # 获取href属性
soup.a['href'] # 也可简写为这种形式 -
获取内容
1
2
3soup.a.string
soup.a.text
soup.a.get_text()如果标签还有标签,那么string获取到的结果为None,而其它两个,可以获取文本内容
-
find
1
2
3
4
5soup.find('a') # 找到第一个符合要求的a
soup.find('a', title="xxx")
soup.find('a', alt="xxx")
soup.find('a', class_="xxx")
soup.find('a', id="xxx")find方法不仅soup可以调用,普通的div对象也能调用,会去指定的div里面去查找符合要求的节点
find找到的都是第一个符合要求的标签 -
find_all
1
2
3soup.find_all('a') # 查找所有的a
soup.find_all(['a', 'b']) # 查找所有的a和b
soup.find_all('a', limit=2) # 查找前两个a -
select
- 根据选择器选择指定的内容
- 常见的选择器:标签选择器、类选择器、id选择器、组合选择器、层级选择器、伪类选择器、属性选择器
1
2
3
4
5
6
7a
.dudu
#lala
a, .dudu, #lala, .meme
div .dudu #lala .meme .xixi # 下面好多级
div > p > a > .lala # 只能是下面一级
input[name='lala']select选择器返回永远是列表,需要通过下标提取指定的对象,然后获取属性和节点
该方法也可以通过普通对象调用,找到都是这个对象下面符合要求的所有节点。
示例
1 | from bs4 import BeautifulSoup |
1 |
|
bs4实例
-
解析器:
html.parser
、lxml
前者官方自带,后者需要安装,一般使用后者
-
**爬取网址:**http://www.shicimingju.com/book/
示例1:爬取三国演义
1 | import urllib.request |
示例2:爬取智联
1 | import urllib.request |