您的位置:首页 > 理论基础 > 计算机网络

零基础自学用Python 3开发网络爬虫(五): 使用第三方模块快速抓取与解析

2017-03-28 15:27 1251 查看
点击进入本系列目录
在前面的四篇文章中, 我们一直采用 python 3 自带的 urllib  模块来抓取网页, 然后用 re 模块来处理抓取到的数据. 这次我们使用 Requests 库来代替 urllib, 用 BeautifulSoup 来代替 re 模块.

对于这两个模块来说, 学习使用它们的最好方法是看官方文档, 这两个模块的官方文档都有中文版(翻译的不是很完整).

Requests 官网
BeautifulSoup 官网
在 Windows 下如果安装了 Python3, 那么在 cmd 下直接可以通过 pip 来安装这两个模块, 命令如下:

pip install requests
pip install beautifulsoup4

1
2

pip
install requests

pip install beautifulsoup4

在 Ubuntu 下安装方法如下:

sudo apt-get install python3-pip
sudo pip3 install requests
sudo pip3 install beautifulsoup4

1
2
3

sudo
apt-get
install python3-pip

sudo pip3 install
requests
sudo
pip3 install beautifulsoup4

然后我们运行 Python3, 试一下是否能把这两个模块 import 进来, 就知道是否安装成功了:

C:\Users\Liu>python
Python 3.4.2 (v3.4.2:ab2c023a9432, Oc
Type "help", "copyright", "credits" o
>>> import requests
>>> from bs4 import BeautifulSoup
>>>

1
2
3
4
5
6

C:\Users\Liu>python

Python 3.4.2
(v3.4.2:ab2c023a9432,
Oc
Type
"help",
"copyright",
"credits" o

>>> import
requests
>>>
from bs4 import
BeautifulSoup

>>>

 

Requests Module

Requests 是 Python 界大名鼎鼎的一个网络库, 其设计哲学是为人类而设计, 所以他提供的功能都非常的人性化. 他的方便对我而言主要有两大点:

对 GET 和 POST 方法的封装做的很好, 自动处理了编码等问题;
默认开启了 Cookies 处理, 在处理需要登录的问题上面非常方便.
Requests 的方便之处不止这两点, 还提供了诸如标准登录接口之类的功能, 我们暂时用不上.

总而言之, 对于使用过 urllib 的我们来说, 用 requests 会感觉我们之前生活在石器时代. 第三方库的强大就在于这里, 这也是 Python 这么火的重要原因.

 

BeautifulSoup Module

BeautifulSoup 大大方便了我们对抓取的 HTML 数据的解析, 可以用tag, class, id来定位我们想要的东西, 可以直接提取出正文信息, 可以全文搜索, 同样也支持正则表达式, 相当给力.

 

小试牛刀

我们随便抓取一个页面, 然后用 soup 来解析一下试试他的威力:

>>> import requests
>>> from bs4 import BeautifulSoup
>>> response = requests.get("http://jecvay.com")
>>> soup = BeautifulSoup(response.text)

>>> print(soup.title.text)
Jecvay Notes - Good luck & Have fun

>>> print(soup.body.text)
改版策略: 技术博客的真正索引

上周, 我换掉了我博客的主题, 使用 BootStrap 框架自己写了一个. 在自己动手写博客主题之前,
我时常时不时到后台主题商店去翻一翻, 想要发现更好看的主题. 挑选有两种:
在一大堆展示面前, 快速浏览, 看到亮眼的就仔细看一看是否满意;
自己想好一个目标, 然后用筛选器(或者人肉)筛选出来.
阅读全文 >> (...省略若干)

>>> for x in soup.findAll("a"):
... print(x['href'])
... http://jecvay.com/2015/02/the-real-index-of-tech-blog.html http://jecvay.com/2015/02/the-real-index-of-tech-blog.html http://jecvay.com/2015/01/wordpress-super-cache.html http://jecvay.com/2015/01/learning-vps-3.html http://jecvay.com/2015/01/nobot-anti-webspider.html http://jecvay.com/2015/01/learning-vps-2.html http://jecvay.com/2014/12/learning-vps-1.html http://jecvay.com/2014/11/what-is-min-cut.html http://jecvay.com/2014/11/compiler-makes-fast-build.html /about-me
/archive

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

>>>
import requests

>>> from
bs4 import
BeautifulSoup
>>>
response =
requests.get("http://jecvay.com")

>>> soup
= BeautifulSoup(response.text)
 

>>> print(soup.title.text)
Jecvay
Notes -
Good luck
& Have
fun

 
>>>
print(soup.body.text)

改版策略: 技术博客的真正索引
 

上周, 我换掉了我博客的主题,
使用 BootStrap
框架自己写了一个. 在自己动手写博客主题之前,

我时常时不时到后台主题商店去翻一翻,
想要发现更好看的主题. 挑选有两种:

在一大堆展示面前, 快速浏览,
看到亮眼的就仔细看一看是否满意;
自己想好一个目标,
然后用筛选器(或者人肉)筛选出来.

阅读全文 >>
(...省略若干)
 

>>> for
x in
soup.findAll("a"):
...  
print(x['href'])

... http://jecvay.com/2015/02/the-real-index-of-tech-blog.html http://jecvay.com/2015/02/the-real-index-of-tech-blog.html http://jecvay.com/2015/01/wordpress-super-cache.html
http://jecvay.com/2015/01/learning-vps-3.html http://jecvay.com/2015/01/nobot-anti-webspider.html
http://jecvay.com/2015/01/learning-vps-2.html http://jecvay.com/2014/12/learning-vps-1.html
http://jecvay.com/2014/11/what-is-min-cut.html http://jecvay.com/2014/11/compiler-makes-fast-build.html

/about-me
/archive

我们十分轻松的获得了全文内容以及所有链接.

 

重访知乎

在上一篇文章中, 我尝试使用 urllib 和 re 获取了知乎登录页面的 _xsrf 参数, 这次我们通过这两个新的模块再试一次.

打开浏览器隐身模式, 打开知乎网, 来到登录界面, 查看源代码, 搜索 xsrf 字样, 得到如下一行:

<input type="hidden" name="_xsrf" value="d4ff8d988193442a774bd0ccff336101"/>

1

<input
type="hidden"
name="_xsrf"
value="d4ff8d988193442a774bd0ccff336101"/>

于是我们只要两行代码就能搞定:

>>> soup = BeautifulSoup(requests.get("http://www.zhihu.com").text)
>>> print(soup.find("input", {"name": "_xsrf"})['value'])
d4ff8d18b293442a764bd0ccff333601

1
2
3

>>>
soup =
BeautifulSoup(requests.get("http://www.zhihu.com").text)

>>> print(soup.find("input",
{"name":
"_xsrf"})['value'])
d4ff8d18b293442a764bd0ccff333601

第三方库就是这么好用!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐