第1章 Python与网络爬虫1
% I x& q3 D/ p/ w1 k0 Z. S1.1 Python语言1
% `6 |* M2 l. f0 N4 Z: [0 {, P( Y1.1.1 什么是Python1* s; f7 ]8 y$ Q& s/ P* T
1.1.2 Python的应用现状2; i. d# ]8 s8 \8 i |" h4 ~, h
1.2 Python的安装与开发环境配置3
. N8 S, u2 I4 h1.2.1 在Windows上安装32 `! i$ v4 Y, t) s/ O! D) `
1.2.2 在Ubuntu和Mac OS上安装4
# n! v5 `4 I* s( q4 }/ D) @1.2.3 PyCharm的使用5- _# d( E6 B/ c( {9 j1 @( d
1.2.4 Jupyter Notebook96 b* g5 V$ b$ D, \. w1 Q7 o
1.3 Python基本语法12
( Z+ l: m6 l- C: `3 J" g. J1.3.1 HelloWorld与数据类型12" T5 ?" X, P; M' N: R, [
1.3.2 逻辑语句19
u9 B% w) L- u& F: @1.3.3 Python中的函数与类22
0 Z' ]4 r/ q' Q% j/ f1 Z+ f! ^1.3.4 Python从0到1254 N6 D5 D9 O4 s! S: @' I) `7 M4 ~
1.4 互联网、HTTP与HTML25
; b6 E3 h# `- n; r. A H. m1.4.1 互联网与HTTP25
- b$ G3 C" ^9 ^ j; F) S( n |; U1.4.2 HTML277 H6 G p P. F* P `; i
1.5 Hello, Spider!29
) E. Z0 D, t2 ~8 ?& @8 A7 y1.5.1 第一个爬虫程序295 L& X O6 l, A9 {. |6 E
1.5.2 对爬虫的思考31# C: R/ d# o3 L* M- ?8 q) B
1.6 调研网站33* o& s4 E: o6 w. ^, v& F6 {1 W- I
1.6.1 网站的robots.txt与Sitemap33
; F3 \/ `% e7 y. l- T1.6.2 查看网站所用技术36- Z) @) @4 s1 b; J7 ~! t
1.6.3 查看网站所有者信息37
8 F6 P6 j: u2 G: m( K. |; f& |1.6.4 使用开发者工具检查网页391 @5 @ F8 e9 n M6 V$ S9 D
1.7 本章小结42% ?4 P$ w3 i7 ]* e: I
5 x) n. i) o0 Y第2章 数据采集43
/ y- v, t$ P- V# r/ E8 R2.1 从抓取开始43& w3 A! \5 q0 o$ V7 T
2.2 正则表达式448 K$ f' y- z- c& w& |8 w/ Z- M$ @; P/ `, _
2.2.1 初见正则表达式447 e x8 n" j6 N) b9 W2 k+ @: r! S- H! _
2.2.2 正则表达式的简单使用46
]; F0 ^( u7 j2.3 BeautifulSoup49
, K% W$ W- q4 f% L8 g9 G2.3.1 安装与上手49
; `2 e# D" u H2.3.2 BeautifulSoup的基本使用52# e6 K; V- W6 @- p
2.4 XPath与lxml553 \8 ~; I9 M, n; a5 H
2.4.1 XPath55& A( B: k$ V7 A/ ]7 v$ D6 Y
2.4.2 lxml与XPath的使用57
3 K: g+ s" |- q. P$ @6 \0 E6 N3 M2.5 遍历页面59, {, Q, j4 `1 V( b4 M4 C
2.5.1 抓取下一个页面59p2 E) M; @& N& d
2.5.2 完成爬虫60
' Z a, o* O7 L7 b" s2.6 使用API63
( I: @( Y! ~; S% b$ A2.6.1 API简介63
8 W1 G+ g" M7 v2 G& _+ B( }2.6.2 API使用示例65
8 Q/ f# u. h& Q: U) v2.7 本章小结68( J$ G+ \3 |+ q6 j/ w; Q
8 \* G* G( W7 ?5 B4 I
第3章 文件与数据存储69
! r- H" b" s# f* o8 r. P9 s3.1 Python中的文件69+ B- @/ I9 f/ }5 ~) i# b
3.1.1 基本的文件读写699 E* T# h' e5 W* }7 i" x9 W
3.1.2 序列化72
% {/ r' B7 [" h# v0 A* p3.2 字符串72
9 W; ]; d4 X$ @" W- Q! G3.3 Python与图片74/ x7 s) M3 V3 G5 Q
3.3.1 PIL与Pillow74
7 i x0 F$ ~2 p" S% o+ R1 [3.3.2 Python与OpenCV简介76( f% F+ r: @2 }3 _6 q
3.4 CSV文件77
' X7 q0 \5 i8 V" _3.4.1 CSV简介77
. }5 S; s% z2 J4 [: a& w+ X3.4.2 CSV的读写77
' `: t) P& l! e8 x9 F3.5 使用数据库79& [0 h8 ?2 l6 u a; z, ~
3.5.1 使用MySQL80
2 n/ z. z/ f% ^ s% B6 ~3.5.2 使用SQLite381
6 |% J9 u- [# ]* Q: n3.5.3 使用SQLAlchemy836 A9 ~7 Q0 a/ B7 R# ], V/ e6 {$ s' V3 U
3.5.4 使用Redis85
( k' i% c5 Y' w3.6 其他类型的文档86
( r0 T1 h! y+ o. @& h3.7 本章小结90
D$ S, p! U* ^# ?; p% c) G
$ _- `# z% G& j0 i' T, a第4章 JavaScript与动态内容91
d; o& P- r3 S# J+ u: r$ p3 u4.1 JavaScript与AJAX技术91( i, k- O& C) f9 V0 |, m8 z8 h
4.1.1 JavaScript语言91
; @( p* F8 y+ W4.1.2 AJAX95
0 E/ T* ]5 E8 g, x$ F4.2 抓取AJAX数据96" X3 e/ a) H9 a! ^! q+ t" v, _
4.2.1 分析数据966 f: Q d, Q \) n) t' F( L
4.2.2 数据提取100
M1 S" ~* K& Z" b4.3 抓取动态内容1071 q, x9 {$ s5 q9 o( ]( o. N4 w( c
4.3.1 动态渲染页面107x2 e" \: c/ I& @( j( B# c9 U0 G
4.3.2 使用Selenium107
5 L$ b/ j \# J! o: U) e4.3.3 PyV8与Splash114
% j) r: t3 v1 d. M9 t# d, T4.4 本章小结118
0 G+ B( }! R3 ? M" `2 O2 j! a! D9 S; C$ j
第5章 表单与模拟登录119
+ P$ ^8 r+ k- w# ]" [* |! G5.1 表单119
: j* U7 R2 N* h/ Q* z5.1.1 表单与POST119
. _( Y' Y8 t% C/ Q' a. P }5.1.2 POST发送表单数据121) Y/ b# b; ~$ I$ m2 Z, T' K9 v3 R/ ~
5.2 Cookie124
8 s' U" I7 Y' l9 X& g; y5.2.1 什么是Cookie1242 `. U: m" h) v* B: Y
5.2.2 在Python中使用Cookie125- S8 O$ _! ]* p H- O
5.3 模拟登录网站128; l% k; t8 M; Y0 W1 \! q! }' d
5.3.1 分析网站128
( n9 ]. @4 y! G5 R( C# ?5.3.2 通过Cookie模拟登录129
& m, z& M3 [1 Y; y, A5.4 验证码133" I, m0 K! F+ [. v# @8 M& u9 Z
5.4.1 图片验证码133# f! H6 K) B& Y
5.4.2 滑动验证134
$ v+ b0 d6 L) a# d/ m5.5 本章小结139
; R' i( Q( M, c# C j! p+ V# }9 L1 u# z7 u4 A' c% Y
第6章 数据的进一步处理1404 u* \' P: r& l5 B( n
6.1 Python与文本分析140" v- S: ~- t; Y# ^. n
6.1.1 什么是文本分析140
4 a q4 L& I. _- G* n0 P4 x# s6 ]; a6.1.2 jieba与SnowNLP141
[# x- w" b6 _# c! I6.1.3 NLTK145$ _' j; A! E5 U; z5 ^
6.1.4 文本分类与聚类149- r' f. h0 [5 P. }0 W
6.2 数据处理与科学计算1506 f7 ^; g: a! \' z7 Y
6.2.1 从MATLAB到Python150. j; \% ~) k4 S' @) @4 M
6.2.2 NumPy151; ? w. Q+ R$ ], N/ d" [
6.2.3 Pandas156
/ v. ?: ~5 B A( z+ f6.2.4 Matplotlib163- h, K/ H! t5 ^7 _* H% O/ \& x
6.2.5 SciPy与SymPy1670 {" F( R) @4 G z
6.3 本章小结167
+ v+ w3 I* d) c. F; f. @7 r. q
$ ^# Y& G4 ?4 `( S第7章 更灵活的爬虫168
9 C% T4 [1 }6 ?1 [2 E$ R0 A8 [' N7.1 更灵活的爬虫—以微信数据抓取为例168
& T1 ~; J$ a; V' z6 ]5 p+ o7.1.1 用Selenium抓取Web微信信息168- i, S5 l' e" L( ?: C) j. H! j M' _: Z
7.1.2 基于Python的微信API工具1729 ~( c% X$ ~6 I) }6 D
7.2 更多样的爬虫175
+ L- A0 j7 ^; U+ ]' L7.2.1 在BeautifulSoup和XPath之外175
$ y/ [% M% `6 T4 O" A+ v5 m7 A8 K7.2.2 在线爬虫应用平台179
( D2 [. u/ z/ `3 E/ v$ |" R7.2.3 使用urllib181
5 [( |3 ~) U% j6 H' o7.3 爬虫的部署和管理190
% s0 h6 U& s' r! B% y7.3.1 配置远程主机190/ e( b' G" v+ q6 P
7.3.2 编写本地爬虫192
+ T$ Q- }/ P. [) A7 ~7.3.3 部署爬虫198
% T' j, H# d- R7.3.4 查看运行结果199
; m+ b1 s: N8 K' t e$ u. [7 {7.3.5 使用爬虫管理框架200' ?( C3 K1 d. Q
7.4 本章小结203( c( M1 p7 _! A* i( i- F/ i1 j
9 L2 |1 h0 V4 L/ B2 S* B4 `9 g" }第8章 浏览器模拟与网站测试204/ ~3 t* i! m- A2 c+ x
8.1 关于测试2043 A% s" F; l% d, @& n. ` @
8.1.1 什么是测试204
' V6 j& O1 ^& U3 o A, h) Y/ }% R7 z, q8.1.2 什么是TDD205
1 O1 v: p& ]- o, \* N# F8.2 Python的单元测试205
: T q! q, E9 F3 w* y8.2.1 使用unittest2052 E# Y, H& X s
8.2.2 其他方法2085 g) P9 y4 e5 W7 x4 g7 e8 S
8.3 使用Python爬虫测试网站209( T" D9 b b) Y: B4 a
8.4 使用Selenium测试212
4 G3 b. H6 V" y5 A, |$ P& K) A8.4.1 Selenium测试常用的网站交互212
' t4 D3 v: g5 h7 d8.4.2 结合Selenium进行单元测试214
6 r! K, ]) M3 Z" a+ S* n B8.5 本章小结215
7 J2 `* M# p: G# F/ _2 S+ N" L* H! Q
第9章 更强大的爬虫216
* l( u; `0 Q+ M# m2 b9.1 爬虫框架216; R3 P# l2 T: ~% w* w. @9 ?
9.1.1 Scrapy是什么216
- k p% f1 e" [. V; m+ h0 Y: j9.1.2 Scrapy安装与入门218
- F ^- V- h/ s" a1 K9.1.3 编写Scrapy爬虫221+ Y) x, L0 q5 @' E5 F
9.1.4 其他爬虫框架223
5 q' h" g3 L8 ^& U8 w9.2 网站反爬虫224
) T4 t) X0 R8 Y: P7 W9.2.1 反爬虫的策略2249 t1 [ u% b! _0 d# M7 R
9.2.2 伪装headers225
) S/ ] G, i e! s9.2.3 使用代理228: \- p' r- v' e z# u
9.2.4 访问频率232
l. p& L$ A3 Z: X9.3 多进程与分布式233
+ c5 A3 C7 g* U9.3.1 多进程编程与爬虫抓取233& l/ y/ z7 _: {: U4 U3 b% K
9.3.2 分布式爬虫235
/ w$ p7 n: _) B: \9.4 本章小结235N6 [* L I% a6 T
7 p4 S8 l5 _5 ]' L
第10章 爬虫实践:火车票余票实时提醒2361 I3 d: n- ]. `/ b7 B
10.1 程序设计236
* k& N1 M, g2 x10.1.1 分析网页236+ J' E, x9 C; }+ N- z# @
10.1.2 理解返回的JSON格式数据的意义238
; j6 r/ M1 G( Z/ ]10.1.3 微信消息推送238
' v2 g' C' T0 {8 y1 W10.1.4 运行并查看微信消息243
, y: Z: E1 `: `- z* S, D10.2 本章小结244! U! u# K1 a" m2 O5 f3 j3 }
javazx.comI2 w8 R8 v0 O9 {9 t
第11章 爬虫实践:爬取二手房数据并绘制热力图245
! D+ U+ a1 q- d. M11.1 数据抓取245
1 `! {+ ~6 ^) x' O' p. h6 t11.1.1 分析网页245
/ h& ]4 u. s& n4 u, K( e7 E11.1.2 地址转换成经纬度247( [& C, o6 M3 V6 t
11.1.3 编写代码2481 O4 ^& @& S6 d3 Z/ ~: a# q
11.1.4 数据下载结果252
6 g2 v. ?" C! W/ G. z/ E, m$ q! K" k11.2 绘制热力图2525 ?8 Q2 |4 T% `9 W" L
11.3 本章小结259
h9 ]6 g+ z% l* g- v9 _" y3 E8 b% t/ d: |0 H! Y% y
第12章 爬