Python爬虫学习笔记(BeautifulSoup补充)

from bs4 import BeautifulSoup
soup = BeautifulSoup('<p>Hello</p>','lxml') #添加lxml解析器
print(soup.p.string) #获取p标签中的字符

 

from bs4 import BeautifulSoup

soup = BeautifulSoup(html,'lxml') #添加lxml解析器,BeautifulSoup对象进行初始化
print(soup.prettify()) #将待解析的HTML代码自动更正并以标准的缩进格式输出
print(soup.title) #选择title节点
print(soup.title.name)# 获取title节点的名称
print(type(soup.title)) #输出title节点类型为tag
print(soup.title.string)#输出HTMLtitle节点的文本内容
print(soup.head) #选择head节点
print(soup.p)#选择第一个p节点
print(soup.p.attrs)#返回节点的属性以字典的形式输出
print(soup.p.attrs['name'])#获取第一个p节点的name属性等价于print(soup.p['name'])
print(soup.p.head.title) #嵌套选择,选择head里面的title
print(type(soup.p.head.title))
print(soup.p.head.title.string)

print(soup.p.contents) #选取第一个p节点的所有直接(外层)子孙节点,以列表的形式输出
print(soup.p.children) #生成器类型输出第一个p节点的而所有直接子孙节点
for i,child in enumerate(soup.p.children):#枚举出获取的所有的直接(外层)子孙节点
    print(i,child)

print(soup.p.descendants) #生成器类型输出第一个p节点的所有子孙节点(内外层)
for i,child in enumerate(soup.p.children):#枚举出获取的所有的子孙节点
    print(i,child)

print('Parent:')
print(type(soup.a.parents)) #获取第一个a节点的所有父节点,生成器类型
print(soup.a.parent) #获取第一个a节点的第一个父节点及其内容
print(list(soup.a.parents)[0]) #获取文本
print(list(soup.a.parents)[0].attrs['class']) #获取属性
print(list(enumerate(soup.a.parents))) #列表输出a的所有祖先节点(索引+内容)

print('Next Sibling:')
print(type(soup.a.next_sibling))
print('Next Sibing',soup.a.next_sibling) #获取第一个a节点的下一个兄弟节点
print(soup.a.next_sibling.string)
print('Prev Sibing',soup.a.previous_sibling) #获取第一个a节点的上一个兄弟节点
print('Next Sibings',list(enumerate(soup.a.next_sibling))) #获取第一个a节点的所有的后面的兄弟节点的生成器
print('Prev Sibings',list(enumerate(soup.a.previous_sibling))) #获取第一个a节点的所有的前面的兄弟节点的生成器


print(soup.find_all(name='ul')) #查询所有ul节点,列表类型
print(type(soup.find_all(name='ul')[0])) #Tag类型
#也可以用嵌套查询
for ul in soup.find_all(name='ul'):
    print(ul.find_all(name='ul'))
    #遍历每一个li
    for li in ul.find_all(name='li'):
        print(li.string)

#属性查询
print(soup.find_all(attrs={'id':'list-1'})) #查询字典,输出列表
print(soup.find_all(attrs={'name':'elements'}))
#也可以用如下语句代替,依然返回列表
print(soup.find_all(id='list-1')) #
print(soup.find_all(class_='element'))#classpython的关键字,所以加下划线,不影响输出
print(soup.find_all(text=re.compile('link')))#返回所有匹配正则表达式的a节点的文本组成的列表
#find_all()find()的区别是find()返回的是第一个匹配结果
#find_parents():返回所有祖先节点;find_parent():返回直接父节点
#find_next_siblings()find_next_sibling()同理
#find_previous_siblings()find_previous_sibling()同理
#find_all_next():返回节点后所有符合条件的节点;find_next():返回节点后第一个符合条件的节点
#find_all_previous()find_previous():同理

#CSS选择器
print(soup.select('.panel .panel-heading'))#
print(soup.select('ul li'))#选取ul节点下的所有li节点,列表类型
print(soup.select('#list-2 .element'))#
print(type(soup.select('ul')[0])) #Tag类型
#嵌套选择
for ul in soup.select('ul'): #遍历ul下的所有li节点
    print(ul.select('li'))

for ul in soup.select('ul'): #获取ulid属性
    print(ul['id'])
    print(ul.attrs['id'])

for li in soup.select('li'):#获取li中的文本
    print('Get Text:','li.get_text()')
    print('String:',li.string)

发布了33 篇原创文章 · 获赞 15 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_33360009/article/details/104234230
今日推荐