Beautifulsoup在网页爬虫中的简单使用

  • Post author:
  • Post category:其他


1、安装模块

目前Beautiful Soup的最新版本是4.x,之前的版本已经停止开发了,所以这里推荐使用beautifulsoup4。

pip3 install beautifulsoup4

2、安装beautifulsoup解析器

Beautiful Soup的HTML和XML解析器是依赖于lxml库的,所以在使用之前先安装lxml库,推荐使用lxml作为解析器,因为效率更高。

pip3 install lxml

3、创建beautifulsoup对象

from bs4 import beautifulsoup

resp = urllib.request.urlopen(url)

html = resp.read()

bs = beautifulsoup(html,’lxml’)

print(bs.prettify())  #格式化html结构,更加美化层次。

4、使用标签获取内容信息

print(bs.title)   #单独获取title标签

print(bs.title.string)  #获取title标签里面的内容。

print(bs.a)  #获取第1个出现a标签的信息,其它a标签不显示

print(bs.a.name)  #获取a标签的名字,也就是“a”

print(bs.a.attrs)  #获取a标签后面的属性如:’href’: ‘https://www.baidu.com’,他是一个字典。

print(bs.a.attrs[‘href’]) #获取标签属性里面的某一个值时,可以使用字典取值法。

print(bs.a.string)  #获取标签尖挎号之间的字符串内容。

5、find_all(name,attrs,recursive,string,**kwargs)

name:对“标签名”进行检索

attrs:对“标签的属性值”进行检索。

recursive:是否对子孙进行检索,默认是True。

string:<>…</>中字符串区域的“字符串”进行检索。

print(bs.find_all(id=”content_views”))  #根据标签的ID进行检索。

# print(bs.find_all(string=’web’))  #可以检索字符串是否存在。

6、CSS选择器,select

(1)id选择器需要使用#来定位元素,如果想获取标签中含有id=’list-2′,那可以使用select(#list-2)来定位。

(2)类选择器使用.来定位元素,例如:获取所有的ul标签.list

(3)标签选择器,使用标签来选择,例如获取h4标签,直接h4

(4)混合使用获取第一个ul中的li节点,.panel-body #list-1 li

html = ”’

<div class=”panel”>

<div class=”panel-heading”>

<h4>Hello</h4>

</div>

<div class=”panel-body”>

<ul class=”list” id=”list-1″>

<li class=”element”> Foo</li>

<li class=”element”>Bar</li>

<li class=”element”>]ay</li>

</ul>

<ul class=”list list-small” id=”list-2″>

<li class=”element”> Foo</li>

<li class=”element”>Bar</li>

</ul>

</div>

</div>

”’

soup = BeautifulSoup(html, ‘lxml’)

print(soup.select(‘.panel .panel-heading’))  #获取类标签panel-heading的div。

print(soup.select(‘ul li’))   #获取所有的li节点

print(soup.select(‘#list-2 .element’))  #获取id为list-2标签的,而且下面类名为element节点。

print(type(soup.select(‘ul’)[0])) #获取第二个ul节点

7、CSS的高级嵌套方法

for ul in soup.select(‘ul’):  #先选择一个节点,再获取这个节点下面的子节点。

print(ul.select(‘li’))

for li in soup.select(“#list-2 li”):   #获取属性。

print(type(li))

print(li.attrs)

print(li.attrs[‘class’])

for ul in soup.select(“#list-2”):

print(type(ul))

print(ul.strings)

print(list(ul.strings))      #[‘\n’, ‘ Foo’, ‘\n’, ‘Bar’, ‘\n’]



版权声明:本文为mtldswz312原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。