当前位置:   article > 正文

python爬虫学习之解析_BeautifulSoup

python爬虫学习之解析_BeautifulSoup

目录

一、bs4的基本使用

(1)导入

(2)创建对象

二、节点定位

1、根据标签名查找节点

2、基本函数使用

(1)find

(2)find_all

(3)select

三、节点信息

1、获取节点内容

2、获取节点属性

附:bs4的基本使用.html

四、bs4的应用


注:Python3.10+,使用 Beautiful Soup 时出现错误“AttributeError 'collections' has no attribute 'Callable'”。

在 python 3.10+ 中,collections.Callable已移至collections.abc.Callable 。

故推荐用Python3.10以下版本。

一、bs4的基本使用

(1)导入

from bs4 import BeautifulSoup

(2)创建对象

--服务器响应的文件生成对象

soup = BeautifulSoup(response.read().decode(),'lxml')

--本地文件生成对象

#默认打开文件的编码格式是gbk,故在打开文件的时候要指定编码
soup = BeautifulSoup(open('bs4的基本使用.html',encoding='utf-8'),'lxml')

二、节点定位

1、根据标签名查找节点
#找到的是第一个符合条件的数据
print(soup.a)
#获取标签的属性和属性值
print(soup.a.attrs)
2、基本函数使用
(1)find
#找到的是第一个符合条件的数据
print(soup.find('a'))   #和soup.a差不多
#根据title的值来找到对应的标签对象
print(soup.find('a',title = "A1"))
#根据class的值来找到对应的标签对象
#注意class需要添加下划线
print(soup.find('a',class_ = "A2"))
(2)find_all
# 返回的是一个列表  并且返回了所有的a标签
print(soup.find_all('a'))

#如果需要获取多个标签的数据,则需要在find_all的参数中添加的是列表的数据
print(soup.find_all(['a','span']))

#limit是查找前几个数据
print(soup.find_all('li',limit=2))
(3)select
#select会返回一个列表,并且会返回多个数据
print(soup.select('a'))  #和find差不多

#类选择器
#可以通过.代表class
print(soup.select('.A2'))

#可以通过#代表id
print(soup.select('#L1'))

#属性选择器
#查找li标签中有id的标签
print(soup.select('li[id]'))

#查找到li标签中id为L1的标签
print(soup.select('li[id="L1"]'))

# 层级选择器
#后代选择器 查找div下面的li  返回的是一个列表
print(soup.select('div li'))

#子代选择器
#某标签的第一级子标签
# warning:在大多数编程语言中需要div > ul >li 这样写,但是在bs4中,可以写div>ul>li。
print(soup.select('div>ul>li'))

# 获取多个标签的数据
print(soup.select('a,span'))
#区别  同find_all  一样输出
print(soup.find_all(['a','span']))

三、节点信息

1、获取节点内容
obj = soup.select('#d1')[0]
#如果标签对象中,只有内容那么string和get_text()都可以使用
#如果标签对象中,除了内容还有标签,那么string就会输出NONE
print(obj.string)
print(obj.get_text())
2、获取节点属性
obj = soup.select('#p1')[0]
#name是标签的名字
print(obj.name)
#将属性值作为一个字典返回
print(obj.attrs)

#获取节点的属性
obj = soup.select('#p1')[0]
print(obj.attrs.get('class'))
print(obj.get('class'))
print(obj['class'])

附:bs4的基本使用.html

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Title</title>
  6. </head>
  7. <body>
  8. <div>
  9. <ul>
  10. <li id="L1">张三</li>
  11. <li id="L2">李四</li>
  12. <li>王五</li>
  13. <a href="" id="" class="A2">蜀道之南718</a>
  14. <span>万事如意</span>
  15. </ul>
  16. </div>
  17. <a href="" title="A1">百度</a>
  18. <div id="d1">
  19. <span>
  20. 恭贺新禧
  21. </span>
  22. </div>
  23. <p id="p1" class="p1">
  24. 大吉大利
  25. </p>
  26. </body>
  27. </html>

四、bs4的应用

用bs4来爬取麦当当的所有汉堡品类

  1. import urllib.request
  2. url = "https://www.mcdonalds.com.cn/index/Food/menu/burger"
  3. response = urllib.request.urlopen(url)
  4. content = response.read().decode('utf-8')
  5. from bs4 import BeautifulSoup
  6. soup = BeautifulSoup(content,'lxml')
  7. #//span[@class="name"]/text()
  8. name_list = soup.select('.name')
  9. for name in name_list:
  10. print(name.get_text())

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/article/detail/53173
推荐阅读
相关标签
  

闽ICP备14008679号