<强>前言强>
要想学好爬的虫,必须把基础打扎实,之前发布了两篇文章,分别是使用XPATH和请求爬取网页,今天的文章是学习Beautiful Soup并通过一个例子来实现如何使用Beautiful Soup爬取网页。
<强>什么是Beautiful Soup 强>
-
<李> Beautiful Soup是一款高效的Python网页解析分析工具,可以用于解析HTL和XML文件并从中提取数据。李>
<李> Beautiful Soup输入文件的默认编码是Unicode,输出文件的编码是utf - 8。李>
<李>美丽汤具有将输入文件自动补全的功能,如果输入的HTML文件的标题标签没有闭合,则在输出的文件中会自动补全& lt;/title>,并且还可以将格式混乱的输入文件按照标准的缩进格式输出。李>
美丽的汤要和其他的解析器搭配使用,例如Python标准库中的HTML解析器和其他第三方的lxml解析器,由于lxml解析器速度快,容错能力强,因此一般美丽和汤搭配使用。
初始化漂亮的汤对象的代码:
html=啊? & lt; html> & lt; title>你好漂亮Soup & lt; p> Hello & lt;/html> “‘ 汤=BeautifulSoup (html, lxml)
只需把第二个参数写成“lxml”即可使用lxml解析器初始化漂亮的汤对象。
Beautiful Soup提供了三种选择器用去爬取节点中的数据,分别是节点选择器,方法选择器和CSS选择器。下面分别介绍着三个选择器的用法。
<强>节点选择器:强>
HTML网页有标题,p,头,tr, td等节点。通过美丽的汤对象+”。“+节点即可直接访问到节点。美丽的汤对象+”。“+节点+”。“+字符串即可提取到节点的文本信息。
用法
描述
soup.title
选择第一个标题节点
soup.title.string
提取第一个标题节点的文本信息
soup.title.attrs
获取第一个标题节点的所有属性,返回的结果的词典。
如果有类属性,则类属性返回的是列表,类属性之间以空格当做分隔符
soup.p.contents
获取第一个p节点的所有直接子节点。
该方法返回的是第一个p节点中包含的所有直接子字节点和文本,
不包含孙节点,两个节点之间的文本也当做是一个节点返回。
返回的结果是列的表
soup.p.children
返回第一个p节点的所有直接子节点,返回的结果是list_iterator对象
soup.p.descendants
获取第一个p节点的所有子孙节点
soup.a.parent
获取第一个一节点的父节点
soup.a.parents
获取第一个一节点的所有祖先节点
soup.p.next_siblings
获取第一个p节点的下一个兄弟节点
soup.p.previous_siblings
获取第一个p节点的上一个兄弟节点
<强>方法选择器:强>
根据传入的参数查找符合条件的节点。下面是方法选择器提供的方法:
方法
描述
find_all(名称、attrs递归、文本、* * kwargs)
根据传入参数查找所有符合条件的节点,
名字是节点名,attrs属性值,文本文本内容等。
文本参数可以是字符串,也可以是正则表达式:
soup.find_all(文本=re.compile('测试'))
找到(名称、attrs递归、文本、* * kwargs)
返回第一个符合条件的节点
find_parents ()
返回所有祖先节点
find_parent ()
返回父节点
find_next_siblings ()
往后查找,所有兄弟节点
find_next_sibling ()
往后查找,返回第一个兄弟节点
find_previous_siblings ()
往前查找,返回所有兄弟节点
find_previous_sibling ()
往前查找,返回第一个兄弟节点
在使用上面的方法时,如果参数中有Python的关键字,则需要在参数下面加一个下划线,例如下面的代码,类是Python的关键字,必须在课堂后加下划线class_=皌itle_class”:
从bs4进口BeautifulSoup html=? & lt; html> & lt; body> & lt;标题id=皌itle_id”类=皌itle_class”名称=氨晏饷啤痹诓馐訠eautifulSoupPython使用Beautiful Soup爬取豆瓣音乐排行榜过程解析