抱歉,您的浏览器无法访问本站

本页面需要浏览器支持(启用)JavaScript


了解详情 >

BeautifulSoup是python的一个库,类似于正则表达式但又与其不同,主要用来爬取网页数据,提供一些用来处理导航、搜索、修改、分析树等功能的函数。通过解析文档为用户提供需要抓取的数据,用起来也比较简单。

刚才说是通过解析文档,首先要保存文档,接上期获取网页后

1
2
3
4
5
html = response.read()
html_str = html.decode('utf-8')
f = open(r"./douban.html","w",encoding='utf-8')
f.write(html_str)
f.close()

获取网页后要先解码,再进行保存。

  1. BeautifulSoup的安装
    1
    pip install beautifulsoup4
    这里使用beautifulsoup4
  2. beautifulsoup解析
    这里只以html.parser-html文件解析展开,夹杂re正则表达式
    1
    2
    3
    4
    5
    from bs4 import BeautifulSoup
    import re
    file = open('douban.html','rb')
    html = file.read()
    bs = BeautifulSoup(html,"html.parser")

当然,这个库的解析并不止这些,小编的“墨水”稍微有点少哈。

上述调试好之后就可以使用了。

  1. 美汤的使用
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    print(bs.a) #查找有a的内容
    print(type(bs.a)) #查看a的类型
    print(bs.a.attrs) #可以拿到一个标签里面所有的属性,以字典形式呈现。
    # 文档的遍历
    print(bs.head.contents) #动手实践会有更多惊喜和深入的理解
    # 文档的搜索
    # 1.find_all()
    t_list = bs.find_all("a") #查找所有的a,列表形式
    # 正则表达式,使用search()方法来匹配内容
    t_list = bs.find_all(re.compile("a")) #这里是只要包含“a”的列表都会呈现出来(简单介绍)
    # 方法:传入一个函数(方法),根据函数的要求来搜索
    def name_is_exists(tag):
    return tag.has_attr("name")
    t_list = bs.find_all(name_is_exists)
    # 2.kwards 参数
    t_list = bs.find_all(id="head")
    for item in t_list:
    print(item) #罗列
    # 3. Text参数
    t_list = bs.find_all(text=[]) #可以是列表,可以是单个
    t_lish = bs.find_all(text=re.comple("\d")) #含有数字的文本
    # 4. limit参数
    t_list = bs.find_all("a",limit=整形) #限制搜索的个数
    # css选择器
    t_list = bs.select('title') #通过标签查找
    t_list = bs.select(".mnav") #通过类名来查找
    t_list = bs.select("#u1") #通过id来查找
    t_list = bs.select("a[class='bri']") #通过属性来查找
    t_list = bs.select("head > title") #通过子标签来查找
    t_list = bs.select(".mnav ~ .bri") #通过兄弟标签来查找
    print(t_list[0].get_text()) #找到某个指定列的文本

这些就是关于beautifulsoup的基本使用方法。相对比较简单。当然还有更多可使用的方法,这里不一一罗列。在使用的过程中可以嵌套re正则表达式达到我们的目的。

文章难免会有些错误,还请指正,感谢!

评论