个人学习笔记(熟悉python中的模块BeautifulSoup,常用方法介绍)

from bs4 import BeautifulSoup
import requests
import re

"""
先总结,后分析
总结如下:
1.推荐使用lxml解析器,必要时使用html.parser
2.推荐使用find()或者find_all()查询匹配单个结果或者多个结果
3.如果熟悉CSS选择器,可以使用select()方法进行选择
"""

# 定义url
url="https://item.jd.com/10038899648257.html"

# 定义头部信息(通过F12或者右键检查获取,刷新)
headers= {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36 Edg/96.0.1054.62"}

# 调用requests,url,headers,返回网页的HTML编码
response = requests.get(url, headers=headers)
# 将HTML编码解码返回文本
response_text = response.text

# 将解析好的HTML代码调用BeautifulSoup模块,并通过html.parser解析器进行解析
soup = BeautifulSoup(response_text, 'html.parser')
#print(soup)
# 通过调用string方法获取第一个title节点包含的文本信息
print(soup.title.string)
# 同样多次调用节点,获取更深层次节点中的文本内容
print(soup.head.title.string)

# 通过利用name属性获取节点的名称
print(soup.title.name)

# 通过attrs获取节点的属性
print(soup.title.attrs)  # 将会返回一个字典
print(soup.title.attrs['name'])

# 通过content属性或者children获取子节点
print(soup.title.content) # 返回一个列表

# 通过descendants属性获取子孙节点
print(soup.title.descendants)

# 通过调用parent属性获取节点的直接的父节点
print(soup.title.parent)

# 通过调用parents属性获取节点的所有祖先节点
print(soup.title.parents)

# 通过调用next_sibling、previous_sibling、next_siblings、previous_siblings获取节点的兄弟节点

# 获取了这些关联节点,同样可以调用string方法或者attrs方法获取节点中存在的文本和属性

"""
下面介绍BeautifulSoup中存在的一些方法选择器,比如find_all()返回所有匹配结果
find()返回的是第一个匹配到的节点元素
"""
# 现在我要查询所有的title节点
print(soup.find_all(name='title'))
# 然后可以通过循环和find_all继续获取里面存在的子节点
for title in soup.find_all(name='title'):
    print(title.find_all(name='p'))
# 直到返回值不包括子节点,就可以通过调用string方法获取子节点保存的文本了
for title in soup.find_all(name='title'):
    print(title.find_all(name='p'))
    for li in title.find_all(name='p'):
        print(li.string)

# 同样find_all()方法还可以传入一些属性进行查询
print(soup.find_all(attrs={'id': 'list_1'}))
print(soup.findall(id='list_1'))

# 通过调用find_all中的text参数来匹配节点中的文本,传入的形式可以是字符串或者正则表达式对象
print(soup.find_all(text=re.compile('link')))

# find()方法同find_all()

#再就是了解CSS选择器了,即调用select()方法
print(soup.select('ul', 'li'))  # 这句代码将选择所有ul节点下面的所有li节点,结果便是所有li节点组成的列表
# 同样还可以遍历
for ul in soup.select('ul'):
    print(ul.select('li'))
    print(ul['id'])  # 获取属性
    print(ul.attrs['id'])  # 获取属性
    print(ul.string)  #获取文本
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值