杨记

碎片化学习令人焦虑,系统化学习使人进步

0%

爬虫库

requests,bs4,XPath

Python的第三方库

在Python开发的过程中,常常需要将一些功能比较通用的代码抽离出来作为一个单独的模块,从而被多个工程调用。这种公共的模块称为Python的库(Library, Lib)。Python在发布时会自带一些由官方开发的常用的库,例如正则表达式“re”、时间“time”等。这些库称为“官方库”。而由非官方发布的库,则称为“第三方库”。

Python之所以如此强大,正是由于它拥有非常多的第三方库。使用第三方库,可以轻易实现各种各样的功能。以获取网页内容为例,Python其实自带了两个模块,分别是urllib和urllib2。使用这两个模块也可以获取网页内容。但是这两个模块使用起来非常麻烦。而requests这个第三方库,让获取网页内容变得极其简单。

注意:

开发者自己写的.py文件的名字绝对不能和Python自带的模块或者已经安装的第三方库的名字相同,否则会产生问题。例如本章内容涉及requests和正则表达式,那么读者在测试代码的时候绝对不能自行创建名为“requests.py”或者“re.py”的文件。一旦创建,代码必定报错。

requests

1
2
3
4
5
6
import requests
html = requests.get('网址')
html_bytes = html.content #使用.content这个属性来显示bytes型网页的源代码
html_str = html_bytes.decode() #将bytes型的网页源代码解码为字符串型的源代码
html_json = html.json()
html_text = html.text

之所以需要把bytes型的数据解码为字符串型的数据,是因为在bytes型的数据类型下,中文是无法正常显示的。

这个“解码”对应的英文为“decode”,因而我们需要使用.decode()这个方法。

这个方法的参数可以省略。在省略的时候,默认使用UTF-8编码格式来把bytes型解码为字符串型的源代码。

可能有一些中文网页,它的编码格式本身不是UTF-8,这就需要在括号里面写明目标编码格式的名字。

XPath

XPath(XML Path)是一种查询语言,它能在XML(Extensible MarkupLanguage,可扩展标记语言)和HTML的树状结构中寻找结点。</br>
安装一个第三方库:lxml

如果直接使用上面的命令来安装,10个人里面有7个人都会出问题。

因为lxml的底层是使用C语言实现的,所以计算机上面需要安装Virtual C++运行库。

但是即便安装好了Virtual C++运行库,还是有可能出问题。

所以需要换一种办法。请用浏览器打开:http://www.lfd.uci.edu/~gohlke/pythonlibs/#lxml 根据自己计算机的Python版本下载对应的whl包。

例如对于64位的Python3.6,可以下载lxml-3.7.3-cp36-cp36m-win_amd64.whl。

下载完成以后,在存放这个whl包的文件夹中打开CMD,并执行以下代码:

1
pip install lxml-3.7.3-cp36-cp36m-vin_amd64.whl

使用这种方法,若还未成功

把lxml-3.7.3-cp36-cp36m-win_amd64.whl这个文件的扩展名由.whl改为.zip,使用WinRAR或者7-Zip等解压缩工具来解压这个文件。

解压以后,会得到两个文件夹</br>
把它们复制到Python安装文件夹下面Lib\site-packages文件夹中即可</br>
打开Python的交互环境,输入import lxml,如果不报错,就表示安装成功

BeautifulSoup4

Beautiful Soup4(BS4)是Python的一个第三方库,用来从HTML和XML中提取数据。

Beautiful Soup4在某些方面比XPath易懂,但是不如XPath简洁,而且由于它是使用Python开发的,因此速度比XPath慢。

使用pip安装Beautiful Soup4:

1
pip install beautifulsoup4

打开python开发环境,输入

1
from bs4 import BeautifulSoup

解析源代码生成BeautifulSoup对象,使用以下代码:

1
2
3
4
5
soup = BeautifulSoup(网页源代码,'解析器')
# 这里的“解析器”,可以使用html.parser:
soup = BeautifulSoup(source, 'html.parser')
# 如果安装了lxml,还可以使用 lxml:
soup = BeautifulSoup(source, 'lxml')

欢迎关注我的其它发布渠道