美味的汤
导入的模块代码
from bs4 import BeautifulSoup
beautifulsoup这个库的原理是通过匹配标签来找到自己想要的东西。基于网页上面的是HTML代码,所以说这样的方法是比正则表达式还要方便的
一般使用到这一个库是在写爬虫的时候,下面是一个写好的爬虫:
from bs4 import BeautifulSoup
import requests
url = 'http://www.baidu.com'
headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:88.0) Gecko/20100101 Firefox/88.0'}
html = requests.get(url, headers=headers).text
# 遍历文档树 有两个参数,第一个是返回的HTML文本,第二个是搜索文档树的解释器:lxml , 和网页内置的html.parser
soup = BeautifulSoup(html, 'lxml')
# 搜索文档树 ,div后面的id属性使用,在标签前面加上# 号搜索 ,class后面的id属性用 . 搜索
print(soup.prettify) # 标准化输出,这样更加美观
result = soup.find_all('div', attrs={'class': 's-news-list-wrapper c-container c-feed-box'}) # 这个方法使用的对象一定要是soup
print(result) # 测试返回的是是否正确
# print(result[class][0]) # find_all函数找不到很有可能是标签的动态加载所致,可以尝试找其他的标签
respond = soup.find_all('img')
print(respond)
一些网站上面是禁止爬虫爬取数据的,在爬虫里尽可能地模拟一般用户访问,这样的话更加容易爬取到自己想要的数据。
美味的汤第一种常见的写法是根据标签来寻找,例如寻找img标签,就是在煲了美味的汤之后,使用标签作为一个方法:
soup.img.attrs #获取所有的属性和值,返回一个字典
soup.img.attrs['href'] 获取href的属性
soup.img['href']
标签里面是有一些子标签和属性的,剩下的也是可以匹配的
比较常用的是find方法和find_all方法,参数的话参考上面的代码。
1.select选择器的使用方法:
根据选择器选择指定的内容
常见的选择器:标签选择器,类选择器,ID选择器,组合选择器,层级选择器,伪类选择器,属性选择器
传递给select()方法的选择器
soup.select('div') 所有名为<div>的元素
soup.select('#author') 带有id属性为author的元素
soup.select('.notice') 所有使用CSS class 属性名为notice的元素
soup.select('div span') 所有在<div>元素之内的<span>元素
oup.select('div > span') 所有直接在<div>元素之内的<span>元素,中间没有其他元素
soup.select('input[name]') 所有名为<input>,并有一个name属性,其值无所谓的元素
soup.select('input[type="button"]') 所有名为<input>,并有一个type属性,其值为bottom的元素
下面是之前写的一份笔记内容:
beautifulsoup4
美丽的汤是一个可以从html或者xml文件中提取数据的python库,能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式,更加方便。
使用美丽的汤解析一段html代码,能够得到一个beautifulsoup对象,并且能够按标准的缩进格式的结构输出。
使用的格式是:
from bs4 import beautifulsoup
soup = beautifulsoup(html_doc,‘html.parser’)
print(soup.prettify())
输出的结果就是整齐排列的html代码
安装美丽的汤:
命令行下执行:
pip install beautifulsoup4
或者
easy_install beautifulsoup4
出问题的话多半是Python的版本问题,重装就好了。
美丽的汤除了支持python标准库里面的html解释器外,还支持第三方的解释器,比如说lxml。
安装:
apt-get install python-lxml
easy_install lxml
pip install lxml
重要的是使用方法
将一段文档传入beautifulsoup的构造方法,就能得到一个文档的对象,可以传入一段字符串或一个文件句柄。
使用美丽的汤创建对象:
soup = beautifulsoup(html)
也可以直接用本地的html文件来创建对象:
soup = beatifulsoup(open(‘index.html’))
意思就是将本地的index。html文件打开用它创建soup对象。
格式化输出:
print soup.prettify()
beautifulsoup将复杂的html文档转换成复杂的树形结构,每个节点都是python的对象,所有的对像可以归纳为四种:
- tag
- navigableString
- beautifulsoup
- comment
tag 简单来说就是html里面的一个个标签,包括标签和标签里面包括的内容。
这样我们就可以使用soup加上标签名轻松地获取这些标签的内容了,比正则表达式还要简单,不过这样输出的只是第一个符合要求的标签,要查询所有的标签的话后面再学。
验证的对象的类型使用
print type(soup.title)
输出是:<class ‘bs4.element.tag’>
navigablestring提供了.string方法可以直接获取到上面使用tag属性得到的标签内的文字。
beautifulsoup对象表示的是一个文档的全部内容,大部分时候,可以把它当做tag对象,是一个特殊的tag,我们可以获取它的类型,名称和属性
comment对象是一个特殊类型的navigablestring对象,其实输出的是内容仍然不包括注释符号,但是如果不好好处理它的话,可能会对我们的文本处理造成意想不到的麻烦。