爬虫之通过BeautifulSoup4查找元素
作者:YXN-python 阅读量:56 发布日期:2024-05-15
安装
pip install beautifulsoup4
简单使用
import requests
from bs4 import BeautifulSoup
url = 'http://qianye88.com/'
res = requests.get(url)
# 构建 bs4 对象
# 语法: 变量 = BeautifulSoup( 网页字符串 , 'html.parser' )
soup = BeautifulSoup(res.text,'html.parser')
1、查找第一个yy标签
# 第一个title
soup.title
# 第一个P
soup.p
2、取出标签的文本内容
'''
xxx 是 bs4对象
- 属性式写法
xxx.text
xxx.string
- 函数写法
xxx.getText()
xxx.get_text()
'''
# 第一个 title 内的文本 (4种方法)
soup.title.text
soup.title.string
soup.title.get_text()
soup.title.getText()
3、取标签的属性内容
'''
假设 xxx = <div class='div2' id='id2' title='haha' name='new'> div的文本 </div>
xxx.name 得到标签名称 div
xxx['id'] 得到对应的值 id2
xxx['title'] 得到 haha
一次性取出所有属性,得到dict
xxx.attrs
'''
soup.p['class']
soup.p['name']
soup.p.attrs
4、精准查找指定标签 1
(通过 tagname,id,class,其他值找)
'''
假设 要找 <div class='div2' id='id2' title='haha' name='new'> div的文本 </div>
1 - 通过标签名称查找
xxx.find(tagname)
2 - 通过id的值
xxx.find(id='')
3 - 通过class。class在python是关键字,用 class_
xxx.find(class_='')
4 - 其他属性
xxx.find(attrs = {})
5 - 通过文本内容
xxx.find(text='') 找到文本内容
xxx.find(tagname='' , text='')
'''
# soup 内的第一个p
soup.find('p')
# 找 id 等于ultwo 的标签
soup.find(id='ultwo')
# attrs 写法
soup.find(attrs={'class':'div11'})
5、精准查找指定标签 2
(通过 tagname,id,class,其他值找 . 找多个标签)
'''
find_all( ) findAll() ,返回多个标签
类似list
1 - 通过标签名称查找
xxx.find_all(tagname)
2 - 通过id的值
xxx.find_all(id='')
3 - 通过class。class在python是关键字,用 class_
xxx.find_all(class_='')
4 - 其他属性
xxx.find_all(attrs = {})
5 - 通过文本内容
xxx.find_all(text='') 找到文本内容
xxx.find_all(tagname='' , text='')
'''
soup.find_all(id='ultwo')
# 想用 ul 得用 下标取值
soup.find_all(id='ultwo')[0]
# 找出 ultwo 内每个li的文本
lis = soup.find(id='ultwo').find_all('li')
[each.text for each in lis]
6、通过上下级关系查找标签对象
'''
xxx.parent 找父元素
xxx.parents 层层向上找父层,
xxx.children 返回所有孩子组成的迭代器
'''
soup.title.parent
soup.p.children
# 是一个迭代器
list(soup.p.children)
7、通过兄弟关系查找标签对象
'''
单词:
前面:previous
后面:next
兄弟姐妹: sibling
包含空格换行文本的兄弟
xxx.previous_sibling xxx前面那个兄弟
xxx.next_sibling xxx 后面那个兄弟
xxx.previous_siblings xxx前面那个兄弟们
xxx.next_siblings xxx 后面那个兄弟们
不 包含空格换行文本的兄弟
是函数
xxx.find_previous_sibling() xxx前面那个标签兄弟
xxx.find_previous_siblings()xxx前面那个标签兄弟们
xxx.find_next_sibling() xxx后面那个标签兄弟
xxx.find_next_siblings() xxx后面那个标签兄弟们
'''
soup.find(name='p',attrs={'name':'dromouse'})
soup.find(title='new')
li02 = soup.find('li',text='02')
li02.previous_sibling
li02.next_sibling
li02.find_previous_sibling()
li02.find_next_siblings()
8、多元素同时查找
'''
xxx.find_all(['a','b','div'] , 其他条件)
'''
soup.find_all(name=['title','h1','b'])
9、正则查找
'''
xxx.find( 属性= 正则表达式 )
xxx.find_all( 属性= 正则表达式 )
'''
# 找 class_= 的值是 sis 开头的
soup.find_all(class_= re.compile('sis\w+'))
10、是否递归查找
'''
xxx.find_all( ... ,recursive=True/False)
是否 只查询第一代中符合条件的
'''
soup.body.find_all('ul',recursive=False)
11、控制查找个数
'''
xxx.find_all(yyy , limit=int) 限制查找的个数
'''
soup.ul.find_all('li',limit=2)
YXN-python
2024-05-15