IT评测·应用市场-qidao123.com技术社区

标题: Python网络爬虫计划(二) [打印本页]

作者: 梦见你的名字    时间: 2025-4-18 19:59
标题: Python网络爬虫计划(二)
目次

六、BeautifulSoup库
1、常见的提取分析网页内容的三种方式
(1)正则表达式
(2)BeautifulSoup库
(3)pyppeteer库中的元素查找函数
2、HTML中的tag
3、BeautifulSoup库的安装和导入
4、BeautifulSoup库分析过程
5、利用BeautifulSoup库分析HTML
6、BeautifulSoup库进阶


六、BeautifulSoup库

1、常见的提取分析网页内容的三种方式

(1)正则表达式

Python自带的re库中的正则表达式,对于网页内容的提取分析非常方便,而且速度极快,但是适应性较差,可能面对不同的页面,正则表达式就需要修改
(2)BeautifulSoup库

速度和正则表达式接近,但是还是没有正则表达式快
(3)pyppeteer库中的元素查找函数

速度较慢(约是正则表达式的百分之一)
2、HTML中的tag

当我们随机打开一个页面,右键页面空白处,然后点击查抄,我们就可以看到一个网页的源码,而在源码中,我们会发现源码中包罗许多的尖括号,即“<>”,这就是一个tag
大部分的tag都包罗<x>和</x>,只有极少数的只有一个<x>(这里的x就是tag的名字)
固然,tag也可以嵌套,即一个tag内里包罗另一个tag
不同的tag可能会包罗不同的功能,而有的tag内里会包罗一些属性,大概一些网站的路径(href,src等),我们可以根据某些特定的tag大概属性,来定位到,查找到我们想要的内容
3、BeautifulSoup库的安装和导入

我们利用pip命令来安装BeautifulSoup库
  1. pip install beautifulsoup4
复制代码
在Python中,我们需要如许导入BeautifulSoup库:
  1. import bs4
复制代码
4、BeautifulSoup库分析过程

①先把HTML文档装入一个BeautifulSoup对象中
②针对对象,我们利用find大概find_all等函数找到我们想要的tag
③找到tag后,可以再次利用find大概find_all等函数去找内部嵌套的tag大概干系的内容
5、利用BeautifulSoup库分析HTML

我们先创建一个HTML文档
  1. <!DOCTYPE html>
  2. <html lang="zh-CN">
  3. <head>
  4.     <meta charset="UTF-8">
  5.     <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6.     <title>Document</title>
  7. </head>
  8. <body>
  9.     <h1>这是一个网页</h1>
  10.     <a href="https://www.baidu.com">点我进入百度</a>
  11.     <a href="https://www.google.com">点我进入谷歌</a>
  12. </body>
  13. </html>
复制代码
再在其当前文件创建一个py文件:
  1. import bs4
  2. Soup = bs4.BeautifulSoup(open(r"D:\学习\Python\001.html" , "r" , encoding = "utf-8") , "html.parser")
  3. #"html.parser" 是一个解析器的名称,用于解析 HTML 文档
  4. tags = Soup.find_all("a")       #如果只想输出第一个,就是用find函数
  5. for tag in tags :
  6.         print(tag.text)
复制代码
输出:

固然,我们可以把第一行换成一个字符串,字符串内里包罗一个HTML文档,也可以指定一个网址,用getHTML()
6、BeautifulSoup库进阶

上面的代码只是探求一个tag的内容大概输出全部名字为x的一类tag,上面提到tag是可以嵌套的,而且tag拥有可以拥有许多属性(比如class,id等)那么我们怎么在众多的属性中和嵌套中找到我们想要的效果:
HTML代码:
  1. <!DOCTYPE html>
  2. <html lang="zh-CN">
  3. <head>
  4.     <meta charset="UTF-8">
  5.     <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6.     <title>test</title>
  7. </head>
  8. <body>
  9.     <span id="css">
  10.         <p>这是一个p标签</p>
  11.     </span>
  12.     <span id="html">
  13.         <div class="p1">这是一个div标签1</div>
  14.         <div class="p2">这是一个div标签2</div>
  15.         <div class="p3">这是一个div标签3</div>
  16.         <div class="p4">
  17.             <scy class="scy" id="hello">
  18.                 <a class="one" href="https://www.baidu.com">点我进入百度</a>
  19.                 <a class="two" href="https://www.google.com">点我进入谷歌</a>
  20.             </scy>
  21.         </div>
  22.     </span>
  23. </body>
  24. </html>
复制代码
Python代码:
  1. import bs4
  2. soup = bs4.BeautifulSoup(open(r"D:\学习\Python\001.html" , encoding = "utf-8") , "html.parser")
  3. #打开文件并读取内容
  4. diva = soup.find("span" , attrs = {"id" : "html"})
  5. #先寻找一个id是html的span标签
  6. if diva != None :   #如果有符合要求的
  7.     for x in diva.find_all("div" , attrs = {"class" : "p4"}) :      #再在里面找有没有class是p4的div标签
  8.         print(x.text)
  9.         if x != None :      #这里x就是class是p4的div标签,在此基础上如果x存在
  10.             for y in x.find_all("a" , attrs = {"class" : "one"}) :  #就在x中找有没有class是one的a标签
  11.                 print(y.text)
  12.                 print(y["href"])    #输出符合条件的标签的href属性中的内容
复制代码
输出:

以上就是Python网络爬虫计划(二)的全部内容



















免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 IT评测·应用市场-qidao123.com技术社区 (https://dis.qidao123.com/) Powered by Discuz! X3.4