达内实习--提取网络有用信息的工具之BeautifulSoup

用户头像
来自浙江理工大学-陈鑫波发布于:2019-08-08 18:59:41

      提取网络有用信息的工具的常用工具有三种,之前先后学习了正则匹配和Xpath,今天学习另一个工具BeautifulSoup。和lxml一样,bs4也是html/xml的解析器,主要功能就是解析和提取。

      使用BeautifulSoup前需要导入bs4。方法为在命令行输入from bs4 import BeautifulSoup。首先要创建BeautifulSoup对象:soup=BeautifulSoup(html,'lxml'),然后格式化soup对象的内容:print(soup.prettify())。BeautifulSoup可将复杂的HTML转换为复杂的树形结构。每个节点都是一个python对象。Tag就是HTML中的一个个标签。利用soup加标签名获得标签的内容,这些对象的类型是bs4.element.Tag,但是注意,它查找的是在所有内容中的第一个符合要求的标签。对于Tag,它有两个重要的属性,是nameattrs,.sting可获得标签里的内容。

      对于生成的树,我们要进行相关的操作。历文档数:1.直接子节点:contents,children,tag.contents属性可以将tag的子节点以列表的方式输出:print(soup.head.contents),输出方式为列表,我们可以用列表列表索引来获取某一个元素。children它返回的不是一个list,不过我们可以通过遍历获取所有子节点。返回的是生成器对象:for child in soup.body.children;print(child)。2.所有的子孙节点:.descendants属性,.contents.children属性包含tag的直接子节点,.descendants属性可以对所有Tag的子孙节点进行递归循环,和.children类似,我们也需要遍历获取其中的内容。
      搜索文档树方法:1.find_all(name,atters,recursive,text,**kwargs),1)name参数:可以查找所有名字为nameTag,字符串对象会被自动忽略。A.传字符串,最简单的过滤器是字符串,在搜索方法中传入一个字符串参数,Beautiful Soup会查找完全匹配的内容,print(soup.find_all('b')。B.传正则表达式如果传入正则表达式作为参数,Beautiful Soup会通过正则表达式的match()来匹配内容。C.传列表如果传入列表参数,Beatiful Soup会将与列表中任一匹配的内容返回。2)keyword参数soup.find_all(id='link2')或其他属性。

      学习了三种爬虫的方法,我将各种爬取方式进行了比较:1、正则:速度:最快,难度:最难,无需安装,2xpathlxml):速度:中等,难度:中等,需要安装lxml,3bs4:速度:慢,难度:低,需要安装。

      最后一次练习为爬取古诗词指定页数的古诗词,包括注释。

点赞 (0) 回复
发布回复
点击图片