11.5 总结

11.5 总结

本章中介绍了requests、bs4以及jieba三个Python的模块及其最常用的基本功能,它可以帮助我们利用Python实现网站信息的请求、解析、获得与分析。但很多时候仅靠这些基础知识不足以解决现实的问题,比如现在一些网站通过针对IP地址、headers等进行爬虫限制,或将信息以动态数据方式存储等,这些都需要我们做进一步的学习。希望通过本章的介绍能让大家对通过编程获取信息产生兴趣,在基本内容之上能够较轻松地深入学习Python。

11.5.1 标准库的调用与第三方库的安装

模块是Python中已有的、逻辑化组织成的代码。库是相关模块的集成。通过对库的调用我们可以快速有效地实现某种功能。在Python中库分为标准库和第三方库。标准库在安装Python时已一并安装完成,因此可以直接通过import关键词实现调用。而第三方库则首先需要通过在计算机命令提示窗口(cmd)中使用pip进行安装(且在win系统下和mac os系统下安装存在差异),然后再回到Python,通过import实现调用。调用的语法根据需要可以有所不同:

import 库名

from 库名 import 类名

import 库名 as *

import 库名 as 库别名

11.5.2 网络信息请求与解析

在进行网络信息爬取前,首先要树立法律和道德意识,养成查看robot.txt文档的习惯。robots.txt文档是一组针对机器人(如网络爬虫)的指令。在这个文档中网站的所有者会列出允许爬取和禁止爬取的内容,虽然这个文档本身只具有呼吁性的功能,但我们也应当予以足够的尊重。

在介绍了robot文档后,我们重点介绍了有关网页信息获取的相关第三方库。其中requests库是用作网页请求的第三方库。常用方法有7种,requests.request()方法是基础方法,但使用最多的是requets.get()方法,其他5种方法分别是.head(),.post(),.put(),.patch()以及.delete()。

requets.get()方法的完整语法为:

r=requests.get(url,params=None,**kwargs)

url:拟获取页面的url链接(必填)

params:url中的额外参数,字典或字节流格式(可选)

**kwargs:12个控制访问的参数(可选)

之后我们介绍的第三方库是用来解析网页的bs4库。通过bs4所提供的BeautifulSoup()方法可以快速实现对网页内容的解析,并通过find_all()方法显现对内容进行查找。

通过对find_all()相关参数的设定可以对网页信息进行筛选,其基本语法为:

soup.find_all(name,attrs,recursive,string,**kwargs)

soup:BeautifulSoup()解析后得到内容的变量名称,可以自拟

name:对标签名称进行检索的字符串形式

attrs:属性参数,用来指定标签的属性,以值的字符串形式出现

recursive:是否对子孙全部检索,默认为True

string:<>…</>中字符串区域的检索字符串

**kwargs:其他控制访问的参数(可选)

除了find_all()之外,bs4库还提供了find()等7种其他常用检索网页信息的方法。

最后我们介绍了针对筛选完成后所获得的中文内容进行进一步处理的库——jieba分词。jieba支持三种分词模式:精确模式、全模式和搜索引擎模式。其中精确模式和全模式都使用cut()实现,通过cut_all参数来控制是采用精确模式还是全模式(cut_all=True 全模式,cut_all=False 精确模式)。搜索引擎模式通过cut_for_search ()实现。除分词外,jieba还提供了诸如词性标注、关键词提取等功能。

在jieba的实例讲解中,我们还穿插介绍了for循环的语法规则。在延伸与讨论环节我们将介绍while循环的语法规则,并引出break语句与continue语句。if条件分支加上循环语句能够模拟出现实生活中我们所面对的大量问题,请认真理解。

在面对实际需求进行代码编写的过程中会出现总总未曾预料到的问题,灵活运用基础语法能够有效地帮助我们解决网页信息爬取过程中的问题。同时,在网络上有很多Python学习、讨论的社区,养成良好的学习习惯,勤于在社区中提出问题、参与讨论,都能极大地提升我们运用编程解决实际问题的能力。