前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何利用BeautifulSoup库查找HTML上的内容

如何利用BeautifulSoup库查找HTML上的内容

作者头像
小Bob来啦
发布2021-03-10 15:47:32
1.8K0
发布2021-03-10 15:47:32
举报

上次小编谈到了对网页信息内容的爬取,那么在具体的编程体系中该如何实现呢?

1.方法介绍

BeautifulSoup库给我们提供了一个find_all方法,如下:

<>.find_all(name,attrs,recursive,string,**kwargs)

find_all函数的功能是返回一个列表,存储我们需要查找的内容。

2.相关参数介绍

第一个参数是name:对HTML中标签名称的检索字符串。

比如我们在http://python123.io/ws/demo.html这个简单的网页中找到与a和b标签相关的内容。

首先,打开网页右键找到检查,然后可以看到与a和b标签相关的内容:

下一步,我们决定用上面BeautifulSoup库提供的方法开始查找及其准备:

  1. 引用相关库。
  2. 用get方法构造一个请求,获取HTML网页。
  3. 将网页对应的内容储存到demo变量中,并对HTML网页进行解析。
  4. 随后便使用查找语句对标签的查找。

相关代码如下:

import requests
from bs4 import BeautifulSoup
r=requests.get("http://python123.io/ws/demo.html")
demo=r.text
soup=BeautifulSoup(demo,"html.parser")
print(demo)
print(soup.find_all('a'))
print(soup.find_all(['a','b']))

运行结果如下:

如果我们要查找的网页是一个较大的网站,所涉及的标签内容很多,那么该如何查找呢?

To:加个for循环,即可打印出所有的标签信息。

相关代码如下:

import requests
from bs4 import BeautifulSoup
r=requests.get("http://python123.io/ws/demo.html")
demo=r.text
soup=BeautifulSoup(demo,"html.parser")
for tag in soup.find_all(True):
    print(tag.name)

运行结果如下:

第二个参数是attrs:对标签属性值的检索字符串,可标注属性检索。

  1. 查找p标签包含course的属性值。
  2. 查找id=link1的属性值。

相关代码如下:

import requests
from bs4 import BeautifulSoup
r=requests.get("http://python123.io/ws/demo.html")
demo=r.text
soup=BeautifulSoup(demo,"html.parser")
print(soup.find_all('p','course'))#查找p标签包含course的属性值
print(soup.find_all(id='link1'))#查找id=link1的属性值

运行结果如下:

第三个参数:recursive:是否对子孙标签全部检索,默认True。

1.对a标签是否进行子孙标签全部检索。

相关代码如下:

import requests
from bs4 import BeautifulSoup
r=requests.get("http://python123.io/ws/demo.html")
demo=r.text
soup=BeautifulSoup(demo,"html.parser")
print(soup.find_all('a'))
print(soup.find_all('a',recursive=False))#前后对比

运行结果如下:

第四个参数是string:<>...</>中字符串区域的检索字符串。

1.检索字符串Basic Python。

相关代码如下:

import requests
from bs4 import BeautifulSoup
r=requests.get("http://python123.io/ws/demo.html")
demo=r.text
soup=BeautifulSoup(demo,"html.parser")
print(soup)
print(soup.find_all(string="Basic Python"))#前后对比

运行结果如下:

3.与find_all相关的方法

在以后的Python爬虫中,find_all方法会经常用到,同时,Python也为它提供了一些简写形式,如:

<tag>(...) 等价于 <tag>.find_all(...)
soup(...)等价于 soup.find_all(...)

最后,介绍与find_all相关的扩展方法,其函数内部参数与find_all相同:

  • <>.find():搜索且只返回一个结果,字符串类型。
  • <>.find_parents():在先辈节点中搜索,返回列表类型。
  • <>.find_parent():在先辈节点中返回一个结果,字符串类型。
  • <>.find_next_siblings():在后续平行节点中搜索,返回列表类型。
  • <>.find_next_silbling():在后续平行节点中返回一个结果,字符串类型。
  • <>.find_previous_siblings():在前序平行节点中搜索,返回列表类型。
  • <>.find_previous_sibling():在前序平行节点中返回一个结果,字符串类型。

To:其上方法区别主要在于检索区域和检索返回次数结果个数的不同。

Python爬虫系列,未完待续...

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-02-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员Bob 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档