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 | import requests |
之所以需要把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
5soup = BeautifulSoup(网页源代码,'解析器')
# 这里的“解析器”,可以使用html.parser:
soup = BeautifulSoup(source, 'html.parser')
# 如果安装了lxml,还可以使用 lxml:
soup = BeautifulSoup(source, 'lxml')