bs4
-
bs4进行数据解析
定位标签
提取标签,标签属性里面存储的数据值
实例化一个BeautifulSoup对象,并且将页面源码数据加载到该对象中
通过调用BeautifulSoup对象中相关的属性或者方法进行标签定位和数据提取
-
环境安装
- pip install bs4
- pip install lxml
- 若bs4无法安装
- 需要将pip源设置为国内源,阿里源、豆瓣源、网易源等
- windows
(1)打开文件资源管理器(文件夹地址栏中)
(2)地址栏上面输入 %appdata%
(3)在这里面新建一个文件夹 pip
(4)在pip文件夹里面新建一个文件叫做 pip.ini ,内容写如下即可
[global]
timeout = 6000
index-url = https://mirrors.aliyun.com/pypi/simple/
trusted-host = mirrors.aliyun.com
- linux
(1)cd ~
(2)mkdir ~/.pip
(3)vi ~/.pip/pip.conf
(4)编辑内容,和windows一模一样
- 需要安装:pip install bs4
bs4在使用时候需要一个第三方库,把这个库也安装一下
pip install lxml
实例化BeautifulSoup对象
导入BeautifulSoup模块
form bs4 import BeautifulSoup
将本地的html文档中的数据加载到该对象中
from bs4 import BeautifulSoup
if __name__ == '__main__':
fp = open('../requests/baidu.html', 'r', encoding='utf-8')
soup = BeautifulSoup(fp, 'lxml')
将互联网上获取的页面源码加载到该对象中
import requests
from bs4 import BeautifulSoup
if __name__ == '__main__':
headers = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36'
}
url = 'https://www.baidu.com/'
page_text = requests.get(url=url, headers=headers).text
soup = BeautifulSoup(page_text, 'lxml')
print(soup)
bs4提供的用于数据解析的方法
import requests
from bs4 import BeautifulSoup
if __name__ == '__main__':
headers = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36'
}
url = 'https://www.baidu.com/'
page_text = requests.get(url=url, headers=headers).text
soup = BeautifulSoup(page_text, 'lxml')
print(soup) # 打印整个页面
print(soup.TagName) # 打印标签名为TagName的第一个对象
print(soup.img)
print(soup.img['src']) # 获取标签的属性值
print(soup.find('img')) # 与soup.img一样
print(soup.find('div', class_='s-isindex-wrap'))
print(soup.find('div', id='s_wrap'))
print(soup.find('a', target='_blank'))
print(soup.find_all('a')) # 以一个数组的形式返回全部a标签
# select
print(soup.select('a')) # 返回复合要求的全部对象
print(soup.select('.s-isindex-wrap')) # 通过class名查找
print(soup.select('#s_wrap')) # 通过id名获取
打印全部a标签的href
for i in soup.find_all('a'):
print(i['href'])
# 层级选择器
print(soup.find('div', class_='s-isindex-wrap'))
- 层级选择器:
- soup.select('.content > ul > li > a'):>表示的是一个层级
- oup.select('.content > ul a'):空格表示的多个层级
- 获取标签之间的文本数据:
- soup.a.text/string/get_text()
- text/get_text():可以获取某一个标签中所有的文本内容
- string:只可以获取该标签下面直系的文本内容