在前面的四篇文章中, 我们一直采用 python 3 自带的 urllib 模块来抓取网页, 然后用 re 模块来处理抓取到的数据. 这次我们使用 Requests 库来代替 urllib, 用 BeautifulSoup 来代替 re 模块.
对于这两个模块来说, 学习使用它们的最好方法是看官方文档, 这两个模块的官方文档都有中文版(翻译的不是很完整).
在 Windows 下如果安装了 Python3, 那么在 cmd 下直接可以通过 pip 来安装这两个模块, 命令如下:
1
2
|
pip
install
requests
pip
install
beautifulsoup4
|
在 Ubuntu 下安装方法如下:
1
2
3
|
sudo
apt
-
get
install
python3
-
pip
sudo
pip3
install
requests
sudo
pip3
install
beautifulsoup4
|
然后我们运行 Python3, 试一下是否能把这两个模块 import 进来, 就知道是否安装成功了:
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 来解析一下试试他的威力:
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 字样, 得到如下一行:
1
|
<input
type
=
"hidden"
name
=
"_xsrf"
value
=
"d4ff8d988193442a774bd0ccff336101"
/>
|
于是我们只要两行代码就能搞定:
1
2
3
|
>>>
soup
=
BeautifulSoup
(
requests
.
get
(
"http://www.zhihu.com"
)
.
text
)
>>>
print
(
soup
.
find
(
"input"
,
{
"name"
:
"_xsrf"
}
)
[
'value'
]
)
d4ff8d18b293442a764bd0ccff333601
|
第三方库就是这么好用!