>

Python爬虫之BeautifulSoup库的入门与利用,Python爬虫

- 编辑:金沙国际平台登录 -

Python爬虫之BeautifulSoup库的入门与利用,Python爬虫

互联网时代里,网络爬虫是一种高效地信息采集利器,可以快速准确地获取网上的各种数据资源。本文使用Python库requests、Beautiful Soup爬取CSDN博客的相关信息,利用txt文件转存。

上篇文章中,Python爬虫之requests库网络爬取简单实战
我们学习了如何利用requets库快速获取页面的源代码信息。我们在具体的爬虫实践的时候,第一步就是获取到页面的源代码,但是仅仅是获取源代码是不够的,我们还需要从页面的源代码中提取出我们所需要的那一部分的信息。所以,爬虫的难点就在于对源代码的信息的提取与处理。
Beautiful Soup 是一个可以从HTML或XML文件中提取数据的Python库.它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式.Beautiful Soup会帮你节省数小时甚至数天的工作时间.

基础知识:

网络爬虫是一种高效地信息采集利器,利用它可以快速、准确地采集互联网上的各种数据资源,几乎已经成为大数据时代IT从业者的必修课。简单点说,网络爬虫就是获取网页并提取和保存信息的自动化过程,分为下列三个步骤:获取网页、提取信息、保存数据。

1.获取网页

使用requests发送GET请求获取网页的源代码。以获取百度为例:

import requestsresponse = requests.get('https://www.baidu.com')print(response.text)

2.提取信息

Beautiful Soup是Python的一个HTML或XML解析库,速度快,容错能力强,可以方便、高效地从网页中提取数据。基本用法:

from bs4 import BeautifulSoupsoup = BeautifulSoup(html, 'lxml')print(soup.prettifyprint(soup.title.string)

Beautiful Soup方法选择器:

find_all()查询符合条件的所有元素,返回所有匹配元素组成的列表。API如下:

find_all(name,attrs,recursive,text,**kwargs)

find()返回第一个匹配的元素。举个栗子:

from bs4 import BeautifulSoupsoup = BeautifulSoup(html, 'lxml')print(soup.find('div', attrs={'class': 'article-list'}))

3.保存数据

使用Txt文档保存,兼容性好。

使用with as语法。在with控制块结束的时候,文件自动关闭。举个栗子:

with open(file_name, 'a') as file_object:    file_object.write("I love programming.n")    file_object.write("I love playing basketball.n")

具体的BeautifulSoup的安装与介绍比较简单,我们可以参考https://www.crummy.com/software/BeautifulSoup/bs4/doc.zh/#id17

分析页面:

要爬取的页面是博客园“我的博客”:

使用Chrome的开发者工具,可以查看这个页面的源代码。

HTML代码说白了其实就是一棵树,这棵树的根节点为html标签,head标签和body标签是它的子节点,当然有时候还会有script标签。body标签下面又会有许多的p标签、div标签、span标签、a标签等,共同构造了这棵大树。

可以很容易看到这个页面的博文列表是一个id为mainContent的div。

图片 1

在class为postTitle的div里面可以找到链接和标题,这就是本文爬取的目标。

图片 2

Beautiful Soup库的理解

简单的说,BeautifulSoup库可以将一个html文档转换成一个BeautifulSoup类,然后我们就可以使用BeautifulSoup的各种方法提取出我们所需要的元素

Beautiful Soup库是解析、遍历、维护“标签树”的功能库

要理解与使用BeautifulSoup库我们就需要对html文档有了解

image.png

编写代码:

获取网页使用requests,提取信息使用Beautiful Soup,存储使用txt就可以了。

# coding: utf-8import reimport requestsfrom bs4 import BeautifulSoupdef get_blog_info():    headers = {'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) '                             'AppleWebKit/537.36 (KHTML, like Gecko) '                             'Ubuntu Chromium/44.0.2403.89 '                             'Chrome/44.0.2403.89 '                             'Safari/537.36'}    html = get_page    soup = BeautifulSoup(html, 'lxml')    article_list = soup.find('div', attrs={'id': 'mainContent'})    article_item = article_list.find_all('div', attrs={'class': 'postTitle'})    for ai in article_item:        title = ai.a.text        link = ai.a['href']        print        print        write_to_file(title+'t')        write_to_file(link+'n')def get_page:    try:        headers = {'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) '                                 'AppleWebKit/537.36 (KHTML, like Gecko) '                                 'Ubuntu Chromium/44.0.2403.89 '                                 'Chrome/44.0.2403.89 '                                 'Safari/537.36'}        response = requests.get(blog_url, headers=headers, timeout=10)        return response.text    except:        return ""def write_to_file:    with open('article.txt', 'a', encoding='utf-8') as f:        f.writeif __name__ == '__main__':    blog_url = "https://www.cnblogs.com/sgh1023/"    get_blog_info()

Beautiful Soup库的引用

Beautiful Soup库,也叫beautifulsoup4 或 bs4
约定引用方式如下,即主要是用BeautifulSoup类

from bs4 import BeautifulSoup
import bs4

image.png

BeautifulSoup对应一个HTML/XML文档的全部内容

Beautiful Soup库解析器

soup = BeautifulSoup('<html>data</html>','html.parser')

image.png

爬取结果:

图片 3

图片 4

BeautifulSoup类的基本元素

image.png

BeautifulSoup解析实例

我们先用requests库获取一个简单的页面
http://python123.io/ws/demo.html

image.png

import requests

r = requests.get("http://python123.io/ws/demo.html")

demo = r.text

print(demo)

image.png

>>> from bs4 import BeautifulSoup
>>> soup = BeautifulSoup(demo, 'html.parser')
>>> soup.prettify()

我们可以利用BeautifulSoup库对页面进行解析和提取

Tag 标签

image.png

>>> soup.title
<title>This is a python demo page</title>
>>> tag = soup.a
>>> tag
<a class="py1" href="http://www.icourse163.org/course/BIT-268001" id="link1">Basic Python</a>

任何存在于HTML语法中的标签都可以用soup.<tag>访问获得
当HTML文档中存在多个相同<tag>对应内容时,soup.<tag>返回第一个

Tag的name(名字)

image.png

>>> soup.a.name
'a'
>>> soup.a.parent.name
'p'
>>> 

每个<tag>都有自己的名字,通过<tag>.name获取,字符串类型

Tag的attrs(属性)

image.png

Tag的NavigableString

image.png

image.png

Tag的Comment

image.png

image.png

基于bs4库的HTML内容遍历方法

image.png

image.png

标签树的下行遍历

image.png

BeautifulSoup类型是标签树的根节点

标签树的下行遍历

image.png

image.png

标签树的上行遍历

image.png

image.png

image.png

标签树的平行遍历

image.png

image.png

image.png

image.png

image.png

小结

image.png

本文由编程发布,转载请注明来源:Python爬虫之BeautifulSoup库的入门与利用,Python爬虫