python 爬虫——Beautifulsoup 模块
·
Beautifulsoup:可以从HTML或XML文件中提取数据的Python库。
beautifulsoup 是一个解析器,可以特定的解析出内容,省去了我们编写正则表达式的麻烦。
1、导入模块
from bs4 import BeautifulSoup
2、Beautifulsoup 使用
在这之前可以先了解一下 Beautifulsoup 解析器,这里解析器使用 python 的内置标准库——
html.parser
soup = BeautifulSoup(解析内容, 解析器)
soup = BeautifulSoup(r.content, 'html.parser')
2.1 标签名查找
使用标签名来获取结点:
- soup.标签名
使用标签名来获取结点标签名:
- soup.标签.name(name——主要用于非标签名式筛选时,获取结果的标签名)
使用标签名来获取结点属性:
- soup.标签.attrs(获取全部属性)
- soup.标签.attrs[属性名](获取指定属性)
- soup.标签[属性名](获取指定属性)
- soup.标签.get(属性名)
使用标签名来获取结点的文本内容:
- soup.标签.text
- soup.标签.string
- soup.标签.get_text()
嵌套方法:
- soup.ul.li(ul标签下的li标签)
from bs4 import BeautifulSoup
html = """
<html>
<head>
<meta charset="UTF-8">
<title>BeautifulSoup</title>
</head>
<body>
<div id="one">123</p>
<p class="two">456</p>
<p>999</p>
<a href="http://www.baidu.com" title="789">000</a>
</body>
</html>
"""
soup = BeautifulSoup(html, 'html.parser')
# 获取结点
print("-------------------获取结点--------------------")
print(soup.head) # 获取head标签——<head><meta charset="utf-8"/><title>BeautifulSoup</title></head>
print(soup.p) # 返回第一个p标签——<p>456</p>
# 获取结点名
print("-------------------获取结点名-------------------")
print(soup.head.name) # head
# 获取文本内容
print("-------------------获取文本内容-----------------")
print(soup.title.string) # 返回title的内容——BeautifulSoup
print(soup.title.text) # 返回title的内容——BeautifulSoup
print(soup.title.get_text()) # 返回title的内容——BeautifulSoup
# 获取属性
print("-------------------获取属性--------------------")
print(soup.p.attrs) # 以字典形式返回标签内容——{'class': ['two']}
print(soup.p.attrs['class']) # 以列表形式返回标签的值——['two']
print(soup.p['class']) # 以列表形式返回标签的值——['two']
t = soup.title
print(t.text) # BeautifulSoup
print(type(t)) # <class 'bs4.element.Tag'>
print(t.name) # title
# 嵌套选择
print(soup.head.title.string) # BeautifulSoup
2.2 find\find_all查找
soup = BeautifulSoup(r.content, 'html.parser')
data_list = soup.find('div', class_='zbgg_table').find_all('tr')
for data in data_list:
url = data.find_all('div', class_='list-content-between')[0].find('a')['href']
Title = data.find_all('div', class_='list-content-between')[0].find('a')['title']
BTypeName = (data.find_all('div', class_='list-content-between')[0].find('a')
.find('font').get_text()[1:-1])
PubDate = (data.find_all('div', class_='list-content-between')[0]
.find('span', class_='list-content-end').get_text()).strip()
find:根据参数找对应的标签,但只返回第一个符合条件的结果。
find_all:根据参数来找对应的标签,返回所有符合条件的结果。
2.3 select筛选——select使用CSS选择规则
soup.select('标签名')——根据标签来筛选出指定标签。
soup.select('#xxxx')——根据id筛选出指定标签,返回值是一个列表。
soup.select('.xxxx')——根据class筛选出指定标签,返回值也是一个列表。
soup.select('#xxxx .xxxx')——id下的class的标签,返回值也是一个列表,例如:
soup.select('.class1 #id2')就是class=class1标签下id=id2的标签
更多推荐
所有评论(0)