【Python爬虫】BeautifulSoup4 库的一些用法 ゝ一纸荒年。 2022-05-30 21:57 1295阅读 0赞 Beautiful Soup 是用Python写的一个HTML/XML的解析器,它可以很好的处理不规范标记并生成剖析树(parse tree)。 它提供简单又常用的导航(navigating),搜索以及修改剖析树的操作。它可以大大节省你的编程时间。 **安装 Beautiful Soup** 如果你安装了python3,可以在windows的命令行CMD运行下面命令 pip3 install BeautifulSoup4 **安装解析器** Beautiful Soup支持Python标准库中的HTML解析器,还支持一些第三方的解析器,其中一个是 lxml .在windows的命令行CMD,可以选择下列方法来安装lxml pip3 install lxml 下表列出了主要的解析器,以及它们的优缺点: <table> <thead> <tr> <th style="background-color:#eeddee;text-align:left;">解析器</th> <th style="background-color:#eeddee;text-align:left;">使用方法</th> <th style="background-color:#eeddee;text-align:left;">优势</th> <th style="background-color:#eeddee;text-align:left;">劣势</th> </tr> </thead> <tbody> <tr> <td>Python标准库</td> <td>BeautifulSoup(markup, "html.parser")</td> <td> <ul> <li>Python的内置标准库</li> <li>执行速度适中</li> <li>文档容错能力强</li> </ul></td> <td> <ul> <li>Python 2.7.3 or 3.2.2)前 的版本中文档容错能力差</li> </ul></td> </tr> <tr> <td>lxml HTML 解析器</td> <td>BeautifulSoup(markup, "lxml")</td> <td> <ul> <li>速度快</li> <li>文档容错能力强</li> </ul></td> <td> <ul> <li>需要安装C语言库</li> </ul></td> </tr> <tr> <td>lxml XML 解析器</td> <td> <p>BeautifulSoup(markup, ["lxml", "xml"])</p> <p>BeautifulSoup(markup, "xml")</p> </td> <td> <ul> <li>速度快</li> <li>唯一支持XML的解析器</li> </ul></td> <td> <ul> <li>需要安装C语言库</li> </ul></td> </tr> <tr> <td>html5lib</td> <td>BeautifulSoup(markup, "html5lib")</td> <td> <ul> <li>最好的容错性</li> <li>以浏览器的方式解析文档</li> <li>生成HTML5格式的文档</li> </ul></td> <td> <ul> <li>速度慢</li> <li>不依赖外部扩展</li> </ul></td> </tr> </tbody> </table> *具体可以参考文档:https://www.crummy.com/software/BeautifulSoup/bs4/doc.zh/\#id15** * 推荐使用lxml作为解析器,因为效率更高. 在Python2.7.3之前的版本和Python3中3.2.2之前的版本,必须安装lxml或html5lib, 因为那些Python版本的标准库中内置的HTML解析方法不够稳定. 使用BeautifulSoup及解析器lxml解析源代码,能够得到一个 BeautifulSoup 的对象,并能按照标准的格式的结构输出。 **看一下下面的例子** url = requests.get('http://www.xingmeng365.com/articles.asp?id=7') url.encoding = 'gb2312' html_doc = url.text soup = BeautifulSoup(html_doc,"lxml") 其中url=requests.get('链接'),通过request库,获取源代码,然后通过encoding = 'gb2312'转换格式 html\_doc = url.text将源代码转换为文件,然后通过BeautifulSoup及解析器lxml,得到一个 BeautifulSoup 的对象,并能按照标准的格式的结构输出。 **Beautiful Soup三种常见用法** **1) 搜索tag:** print(soup.head) #获取头部 print(soup.title) #获取标题 print(soup.h1) #获取h1标签 print(soup.title,soup.h1) #获取title和h1 find(list) **打印出来的内容:** *<title>性感女神王雨纯黑色内衣写真妩媚迷人(1/13)\_性感美女\_星梦365</title> <h1>性感女神王雨纯黑色内衣写真妩媚迷人</h1>* **2) 搜索属性(attrs):** print(soup.find(id='link3')) #获取id为link3的标签 **3) 搜索文字(text):** print(soup.title.getText()) #获取title标签的文字内容 print(soup.h1.get_text()) #获取第h1标签的文字内容 print(soup.p.get_text()) #获取p标签的文字内容 print(soup.span.get_text()) #获取span标签的文字内容 **打印出来的内容:** *性感女神王雨纯黑色内衣写真妩媚迷人(1/13)\_性感美女\_星梦365 性感女神王雨纯黑色内衣写真妩媚迷人* getText()或者get\_text()都是获取属性的文字内容。 **4)循环获取内容:** #循环获取所有页面链接 for link in soup.find_all('a'): print(link.get('href')) #循环获取页面所有图片链接 for link in soup.find_all('img'): print(link.get('src')) #循环获取页面所有符合要求的图片链接 for link in soup.find_all('img'): if "/upload/image" in link.get('src'): print(link.get('src')) *articles.asp?id=7&mm=2 articles.asp?id=790 articles.asp?id=7&mm=2 articles.asp?id=371 articles.asp?id=420 articles.asp?id=278 articles.asp?id=391 articles.asp?id=102* */images/logo.png /upload/image/20170811/20170811210545754575.jpg /upload/Smallpic/20179232057110.jpg /upload/Smallpic/20171061957350.jpg /upload/Smallpic/2017962036430.jpg /upload/Smallpic/201792805460.jpg /upload/Smallpic/20178161949370.jpg* */upload/image/20170811/20170811210545754575.jpg* 以上就是我们常用的一些方法,具体更复杂的方法可以参考官方文档。
还没有评论,来说两句吧...