- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 566739 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 175245
- 相册
- 1
- 日志
- 0
- 记录
- 0
- 帖子
- 5313
- 主题
- 5273
- 精华
- 3
- 分享
- 0
- 好友
- 163
TA的每日心情 | 开心 2021-8-11 17:59 |
|---|
签到天数: 17 天 [LV.4]偶尔看看III 网络挑战赛参赛者 网络挑战赛参赛者 - 自我介绍
- 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
 群组: 2018美赛大象算法课程 群组: 2018美赛护航培训课程 群组: 2019年 数学中国站长建 群组: 2019年数据分析师课程 群组: 2018年大象老师国赛优 |
教你如何编写第一个简单的爬虫
. \5 p* U) r5 I1 t9 y# D, m" d$ y很多人知道爬虫,也很想利用爬虫去爬取自己想要的数据,那么爬虫到底怎么用呢?今天就教大家编写一个简单的爬虫。
/ W; I+ k& n$ H5 J& u, j G; Y2 g$ _
下面以爬取笔者的个人博客网站为例获取第一篇文章的标题名称,教大家学会一个简单的爬虫。2 E5 E( S/ Z' c3 i
6 Q+ @( T! ^- l9 M& J
第一步:获取页面: B7 @- g* Y0 t+ c# Z: H4 J
1 H+ L: o; P, q. o5 E, i2 ]; p
#!/usr/bin/python
% ]) ~9 `, G' [5 _( B# coding: utf-8
$ Y. K" O# q( y" E: Y0 W5 E: n& l4 T0 Z {4 z
import requests #引入包requests. ^* K4 q9 m6 ~ e$ c8 t7 O' L
link = "http://www.santostang.com/" #定义link为目标网页地址
. I2 O$ x/ Z3 }. j4 {# S# 定义请求头的浏览器代理,伪装成浏览器
9 x% y" {* a6 y# Y9 L/ Sheaders = {'User-Agent' : 'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6'}
+ U( ?% \' M/ }. V; o: n
1 p I2 J; N, p8 d) A2 d/ Vr = requests.get(link, headers= headers) #请求网页/ `: j2 _, ^$ O$ Z1 x; }# Z' V. \
print (r.text) #r.text是获取的网页内容代码
5 g$ p" r* x+ O# {# M10 p ]2 X9 ^/ R# ~# r( q/ k
2
& Y, t1 `, o5 Z9 c( b' ]" d W5 B3
0 \) K" B% G, b: r9 Q+ X/ I4
4 h, |* b" [% k2 [" a1 S) N y50 ^' [ P. N& O" z0 z) O" \
6: t! ~1 q3 C/ x# `4 I. h' Y
77 L" C; [) V3 T w1 @
8
9 }# G2 C4 H# u6 {0 o6 T( P+ S9
; H; F, e7 u! Q n103 D$ e* {! T1 }. ~+ W1 u
上述代码就能获取博客首页的HTML代码,HTML是用来描述网页的一种语言,也就是说网页呈现的内容背后都是HTML代码。如果你对HTML不熟悉的话,可以先去w3school(http://www.w3school.com.cn/html/index.asp)学习一下,大概花上几个小时就可以了解HTML。
/ G, S Q' m8 _3 f6 u9 o! g; `- F2 Y8 `& y: M" W. T
在上述代码中,首先import requests引入包requests,之后获取网页。
; z3 e O' b2 p# v- U( @# \( f8 R0 T9 ^3 ]2 d& p# I& s% i
(1)首先定义link为目标网页地址。
7 p! i* g3 c; J" I& j9 o
0 I/ O( @7 P9 P8 M(2)之后用headers来定义请求头的浏览器代理,进行伪装8 C5 g* C% j# K$ E7 r8 g$ q
0 F# C8 h1 T* X# F! o- T$ t' e# u; ~(3)r是requests的Response回复对象,我们从中可以获取想要的信息。r.text是获取的网页内容代码。
. _! v: H3 O8 s& `; T' d3 x7 a# O9 [# t1 ~
运行上述代码得到的结果如图所示。7 \; K) P' g0 m7 }' G* O
5 ?( M+ R7 \0 A
1 N A/ U! H: ^9 q! e I. M. z9 x第二步:提取需要的数据4 o2 _$ X1 u6 z8 _: ~
3 m/ h% c6 I' O( i! b" Z
#!/usr/bin/python+ X& V8 F3 \3 E% D S: p
# coding: utf-8
" a* Y$ v9 C$ Z+ H+ W8 p
. Q7 S V2 N; h; c: P5 f6 Fimport requests
) A; x! ]1 {4 s1 xfrom bs4 import BeautifulSoup #从bs4这个库中导入BeautifulSoup
. L6 J+ n* l0 T; u* e. ~6 A1 P. L8 O$ C0 l7 g1 j$ f
link = "http://www.santostang.com/"
6 R: s7 j# `6 T Gheaders = {'User-Agent' : 'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6'} % l' X* A: d* N
r = requests.get(link, headers= headers)1 x, e! o6 U6 }8 ~2 s f! \6 w
S: ^7 |7 C/ z1 }) d$ [
soup = BeautifulSoup(r.text, "html.parser") #使用BeautifulSoup解析) W" }9 k9 s; N1 W. ]* H% S& `
0 k4 U9 b; s& M% n#找到第一篇文章标题,定位到class是"post-title"的h1元素,提取a,提取a里面的字符串,strip()去除左右空格
( @5 w3 r9 \& _4 n7 Ttitle = soup.find("h1", class_="post-title").a.text.strip()
; A- O- y" s: H+ Z# I( \print (title)8 H6 v$ V$ ?: s5 a3 m, B" E
14 v4 k4 Z1 C; V, C7 G6 o4 I4 `
2
9 F' f- c, ?/ o5 O9 ~$ i3
# N1 ^! r) }0 {) s' z4) t( R, @; k- V9 T! g$ _- l
5
T: P1 |) o4 Q* J3 O3 I# O% ~6
! `" J2 Z% J" c" A7 M# R) c7' v2 Z0 o; s4 l1 y) e* N" j
8
! P7 y- B5 O9 U0 K; _9
. x) i m+ n+ u5 @" V9 O10# z1 B2 J# _! ^, ]9 R8 k
11
$ l( k) D) d3 ^- X12
% U. T0 f# D- R' ^5 ~136 e I5 F* j+ p
14
+ ^5 G' O/ p6 {/ t$ K! P0 g) o15
! v5 F A5 o% n4 Z在获取整个页面的HTML代码后,我们需要从整个网页中提取第一篇文章的标题。
) n9 B, Z1 g4 ]3 X7 G8 N: ~" ^6 w+ x: U3 Z( k9 [/ L: r
这里用到BeautifulSoup这个库对页面进行解析,BeautifulSoup将会在第4章进行详细讲解。首先需要导入这个库,然后把HTML代码转化为soup对象,接下来用soup.find(“h1”,class_=“post-title”).a.text.strip()得到第一篇文章的标题,并且打印出来
, `! Q+ c0 J& x* h; Z& `, H2 g x0 ~# G& G' X7 u) S# n6 \
soup.find(“h1”,class_=“post-title”).a.text.strip()的意思是,找到第一篇文章标题,定位到class是"post-title"的h1元素,提取a元素,提取a元素里面的字符串,strip()去除左右空格。
! x9 n$ k9 W) t# A6 U P
6 l x& c# ~" M: `对初学者来说,使用BeautifulSoup从网页中提取需要的数据更加简单易用。( }; R7 i3 u4 S3 M
( F9 N+ C! x3 O7 I
那么,我们怎么从那么长的代码中准确找到标题的位置呢?0 y8 ^5 C- x5 ]* f, a/ W" o
! Q8 \/ R: j5 i6 j* ^/ C% q
这里就要隆重介绍Chrome浏览器的“检查(审查元素)”功能了。下面介绍找到需要元素的步骤。
- m. y* }; u; r, B7 ]9 e, b
& L$ H; N% v5 b, z# v步骤01 使用Chrome浏览器打开博客首页www.santostang.com。右击网页页面,在弹出的快捷菜单中单击“检查”命令,如图2-17所示。
( Q# y& Y1 F6 w7 g$ B/ \% N3 j' J" t6 R
& Y4 t; X0 N. \, I1 _ J
- ^- |: c: l- N7 E; [步骤02 出现如图2-18所示的审查元素页面。单击左上角的鼠标键按钮,然后在页面上单击想要的数据,下面的Elements会出现相应的code所在的地方,就定位到想要的元素了。2 }5 f: M9 E' U* @2 n$ M
. \1 p) L; X; x/ r d& C
: T& k& }$ _: q
/ z( n. t. o1 H6 L0 y" z
图2-18 审查元素页面
) _8 r8 J( R5 b$ _步骤03 在代码中找到标蓝色的地方,为; F8 U/ Y. k# \6 k: ?% n
# s. ]# `$ ~4 g; K$ {( s
echarts学习笔记(2)–同一页面多图表。我们可以用soup.find("h1",class_="post-title").a.text.strip()提取该博文的标题。( `8 N) y8 @( A
' k9 N& A# a0 r: `5 j4 |5 }第三步:存储数据5 F2 [8 L* n- L5 R4 G) K
2 `& n5 S' ]) H* ]2 V" Pimport requests
/ }+ L' o1 c7 e) ?+ E5 [+ r9 @) Ifrom bs4 import BeautifulSoup #从bs4这个库中导入BeautifulSoup$ X3 f# j- ], V, }( P- p
: y: _' p0 m4 h4 G' n3 \! {link = "http://www.santostang.com/"
1 l# v/ _! z+ D) v) m5 {headers = {'User-Agent' : 'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6'} + d) a0 }: ^6 z: F6 X" a; g" K/ A
r = requests.get(link, headers= headers)9 y" p) D" }% e1 M' [4 k
: g7 `0 I' d, l+ ^" _soup = BeautifulSoup(r.text, "html.parser") #使用BeautifulSoup解析
7 ~- }, _5 M* g- B9 Mtitle = soup.find("h1", class_="post-title").a.text.strip()
# i5 p0 q7 E% Q% f0 uprint (title)8 b2 o+ O1 [7 \( u* _- N
& V* J9 ~3 o7 ]' j# 打开一个空白的txt,然后使用f.write写入刚刚的字符串title
3 k" T5 u/ R6 A7 s- [! d" wwith open('title_test.txt', "a+") as f:1 n2 D ^3 m- d' s: n1 o
f.write(title)
2 V5 n9 z- {+ h" v& X1" }( ?& P% w* t8 @5 O
2
% _0 I4 Z- W9 J" ^3
6 }7 ]9 C! ]- c+ S$ u7 h4+ x4 {% I" O. b7 U6 U% o& D
5: l7 N1 \ G( h2 K
6: u( }: R, X# e0 H- C; a
7* b- K& t& F8 W) Q
8
1 _. P. p6 a1 J2 c3 r4 ~9
) X( n9 d* [) H6 z- e; }10' i; k' i u, ^
11. f. z5 f( r& I3 W1 p( s
12 {1 Y3 l* L$ [7 f1 E8 C+ p4 h7 i6 f
13
* t. ~9 p& w X! @! ^2 S# S! K14/ v. V& S0 u: M/ k }% K
存储到本地的txt文件非常简单,在第二步的基础上加上2行代码就可以把这个字符串保存在text中,并存储到本地。txt文件地址应该和你的Python文件放在同一个文件夹。
3 s8 n1 _6 P7 ~) f% I; M5 o* J8 h6 [, [
返回文件夹,打开title.txt文件,其中的内容如图2-19所示。" j) T$ q/ Y2 R/ K
8 }- q( t' w N) w/ w. l# L/ [( N
以上内容就是本节要介绍的如何编写一个简单的爬虫的步骤,想要学更多爬虫相关的内容,可以到这本书里查哦《Python网络爬虫从入门到实践(第2版)》
$ B9 |% _% p6 I& F( ~8 Y" N" u4 Q6 q6 Z8 t; w' N
$ {7 G; r! T; |目录
3 l- ?( m. }" m3 N
' i5 C& l/ t0 u. G0 G3 j) O. h前言 A, L- |$ ~) r! G S& E) p1 u+ k
第1章 网络爬虫入门18 k- S( a& B6 t8 H2 r% [$ F
1.1 为什么要学网络爬虫2+ N% }( l% k. x. Q/ x" I
1.1.1 网络爬虫能带来什么好处2$ t5 z+ c6 c. F& D' m: e
1.1.2 能从网络上爬取什么数据3
2 y+ B; W- i3 H% a1 P4 v1.1.3 应不应该学爬虫30 \4 V" p7 @4 S$ n8 ~
1.2 网络爬虫是否合法3' S# m$ i, [9 g4 V3 p: |; `
1.2.1 Robots协议4
: q0 I7 A9 A: m1 X0 M/ |# v# Y9 X1.2.2 网络爬虫的约束5
3 p' @" Z* l# r. E# m7 ^ q1.3 网络爬虫的基本议题6& q! v/ k4 c: V" v0 T" s/ z
1.3.1 Python爬虫的流程7
: v4 S2 y5 Y% z2 g1.3.2 三个流程的技术实现79 G5 V* T2 h! V
第2章 编写第一个网络爬虫9
! Z' f7 Q. E: S2.1 搭建Python平台10! X: @+ B4 Y1 \0 f; S4 g
2.1.1 Python的安装106 v" ?7 w7 F! Z0 J8 D7 k1 \
2.1.2 使用pip安装第三方库12
3 z0 [' K+ q6 r1 n8 U& }0 E2.1.3 使用编辑器Jupyter 编程13
/ L& m; f- I6 K: w+ a: G# p2.1.4 使用编辑器Pycharm编程15
2 c3 u9 M8 u' V" O9 n' w8 }2.2 Python 使用入门184 F) I4 M8 H% \, |
2.2.1 基本命令18" j1 W; n: [& k
2.2.2 数据类型191 J# D, n, k; E' x1 H
2.2.3 条件语句和循环语句219 e; A0 }$ O8 w
2.2.4 函数23% \, ~0 O' e2 p8 b& M* K
2.2.5 面向对象编程246 Q7 \, g. U6 U9 F+ I
2.2.6 错误处理280 I/ e: d3 w3 @% B5 g" E+ R' ~
2.3 编写第一个简单的爬虫29 x5 T; h; Q9 }- r+ s) N7 a
2.3.1 第一步:获取页面291 |& V# l9 y) w. C; i4 w" S
2.3.2 第二步:提取需要的数据30/ v2 y# D$ n; Y9 q; d6 ~9 V
2.3.3 第三步:存储数据32
& o3 }( G' `3 P; e2.4 Python实践:基础巩固33
8 ?" F a* {4 f) R6 ~5 Q0 L( o" K2.4.1 Python基础试题347 x) }4 n( w8 S5 O1 Y J) D: P% P
2.4.2 参考答案35
/ _ E/ j L$ \0 ]9 T2.4.3 自我实践题38" V' Z8 t/ }# Y! d0 a3 y8 k
第3章 静态网页抓取39; ^' H, \7 k7 o. X
3.1 安装Requests40# Z, v+ s# W9 C6 v( b
3.2 获取响应内容409 Y8 T' e/ X2 o7 T
3.3 定制Requests412 ~" f& \: B! z* e% @( m$ L' y
3.3.1 传递URL参数41
d8 C: x6 [% n0 Y4 w7 u- G3.3.2 定制请求头42: {6 G) J+ G! a3 V1 o
3.3.3 发送POST请求43
2 c" Q5 k' Y5 _2 T) `3 y( v8 ?3.3.4 超时44
7 I# ~. V/ g* b p. i* h) G3.4 Requests爬虫实践:TOP250电影数据44
) e9 K6 r2 ]4 h" v; p; _9 p5 W- H3.4.1 网站分析452 M% t W+ O2 D' j* W% p8 E& @4 K
3.4.2 项目实践45
8 ~' ?- ]6 E- q# }; U/ @3.4.3 自我实践题47+ C5 j1 { ?. f" I- r
第4章 动态网页抓取48
4 R* G0 n# m, F- }- j }4.1 动态抓取的实例49 N8 l! s" e8 \7 s
4.2 解析真实地址抓取503 ~) Q. T9 J& ]8 a% ^) k( A& V
4.3 通过Selenium模拟浏览器抓取55 a i. q6 \8 f' z' l& S
4.3.1 Selenium的安装与基本介绍55
( |- @9 ]' p: o; ]" V# n) T2 P5 M4 [4.3.2 Selenium的实践案例57
0 q& v% U8 e O2 C4.3.3 Selenium获取文章的所有评论585 {: m* \7 g4 D5 ~1 |
4.3.4 Selenium的高级操作61
6 A. b! b) c. U$ q! e2 f0 c. m4.4 Selenium爬虫实践:深圳短租数据64
/ @$ M: i! c! ^$ U6 |4.4.1 网站分析645 t e, F4 i) L4 e" l
4.4.2 项目实践66/ r' J. p$ g! c( j {" Z
4.4.3 自我实践题69( q3 N' M8 C9 C3 t, @
第5章 解析网页70
6 ~9 P, b y0 C2 f( @5.1 使用正则表达式解析网页71. [& J$ H, T" Y d$ K: d
5.1.1 re.match方法71$ N0 w4 e2 G2 s! F$ r
5.1.2 re.search方法74: p" m0 ~& q0 a, C* s& w# [. k
5.1.3 re.findall方法74: e1 C0 |8 E5 ~" O. o; A. z
5.2 使用BeautifulSoup解析网页76
7 }. ~! @! v9 G* E6 m3 m* w5.2.1 BeautifulSoup的安装76
/ w* c `0 K% F' Z7 Y6 l5.2.2 使用BeautifulSoup获取博客标题775 m5 d6 c9 E8 T. n
5.2.3 BeautifulSoup的其他功能788 T, f8 D5 z w' j- m$ r& X
5.3 使用lxml解析网页82: |0 l8 V' m+ v2 b. v- W
5.3.1 lxml的安装82
% \$ _7 I' z3 m/ ^9 Q; b5.3.2 使用lxml获取博客标题82
: \& d5 J/ i) f7 g+ w! z5 U5.3.3 XPath的选取方法84
( X1 K. Q# i8 x5.4 总结85
( p/ _' {8 p; Q5 }5.5 BeautifulSoup爬虫实践:房屋价格数据864 U! y! I J# h S
5.5.1 网站分析86
1 V& U2 Y1 j( x+ s* W9 q3 v5.5.2 项目实践87
& v# {% R, n2 Q; m5.5.3 自我实践题89
" r# W) B. z7 W( s( ^$ q第6章 数据存储90" n( x) s. Z- R
6.1 基本存储:存储至TXT或CSV91
) ?: ?" [8 c) x3 j6 V7 g. _; A6.1.1 把数据存储至TXT911 S0 W0 g( j; y' ~7 e* ~
6.1.2 把数据存储至CSV93
+ Z6 f8 I) W3 k( n1 _ J) L6.2 存储至MySQL数据库94! [/ H1 M# C7 |! N5 {4 P; p
6.2.1 下载安装MySQL95. X8 t* Z$ h8 d. T9 a
6.2.2 MySQL的基本操作99" @, c1 o4 D4 R+ q. r; r& `
6.2.3 Python操作MySQL数据库104, l+ l, ^$ R3 B) w
6.3 存储至MongoDB数据库106
1 h, u6 Q1 q+ ^ ?* N( W6.3.1 下载安装MongoDB107
" ~0 J! R7 b: Q' c4 n- Y6.3.2 MongoDB的基本概念110* G% b; y) `+ N W4 N( D
6.3.3 Python操作MongoDB数据库1121 ~) m, _9 `( ^) H7 B( A) F
6.3.4 RoboMongo的安装与使用1131 `4 I8 B% n/ G+ _" I8 M0 E+ J: V
6.4 总结115
# N+ M9 g$ M$ {; U0 u5 z6.5 MongoDB爬虫实践:虎扑论坛116, i) S9 k0 r9 }0 N' r2 \' J7 @9 J r3 Y
6.5.1 网站分析116
: O5 f% m' _1 O* r; r5 c, l6.5.2 项目实践1179 q }6 P- {8 A7 a9 F* a9 Z; U7 ~
6.5.3 自我实践题123; y a) b9 X% A' ^5 `* k, ~' g
第7章 Scrapy框架124; ?6 B0 v+ ~& s y; f0 e, k
7.1 Scrapy是什么125
4 ]. R, S; `% b7.1.1 Scrapy架构125
, U6 \! N( @9 P+ F0 [# b2 \* _7.1.2 Scrapy数据流(Data Flow)126$ b! C8 {; ]' D' F
7.1.3 选择Scrapy还是Requests+bs4127
5 a! | O. ?% ?( J" J7.2 安装Scrapy128% o- u* r- I1 I
7.3 通过Scrapy抓取博客1284 J+ O0 t/ ]. S" q
7.3.1 创建一个Scrapy项目1286 y$ e& f* C4 X
7.3.2 获取博客网页并保存129
+ `* ~ s0 w( A* G m8 p7.3.3 提取博客标题和链接数据131) l, _) K$ @1 ]1 S
7.3.4 存储博客标题和链接数据133
. m! z8 v! W. O6 V" Y1 C& b7.3.5 获取文章内容134
$ Q7 a1 A! q4 Z8 D$ ]; e% d7.3.6 Scrapy的设置文件136
9 v' U5 N( V) R- o7.4 Scrapy爬虫实践:财经新闻数据137! h- D" D5 J2 L3 Z( [8 ?) R
7.4.1 网站分析1378 M" Y' z: j% G2 I4 [
7.4.2 项目实践138& C( I8 Q$ g$ T
7.4.3 自我实践题1412 g. r* H0 i( p9 B* h
第8章 提升爬虫的速度142
: P& Y' ?# L( V, h1 H8.1 并发和并行,同步和异步143* f/ `4 `0 }" S0 [3 B! g- v
8.1.1 并发和并行143# i9 ]! A1 P4 I# A* k
8.1.2 同步和异步143
) W$ q! `" D8 z8.2 多线程爬虫144' E, K! Q( o; _1 ?% K, K# C8 i' s
8.2.1 简单的单线程爬虫145
/ n/ y* F# @3 H& {3 [& M8.2.2 学习Python多线程145
: S% R' O+ V" O; T! Z. d. ]8.2.3 简单的多线程爬虫148. N. s" O6 {9 b3 x* `# m! i
8.2.4 使用Queue的多线程爬虫150( j8 X# z7 p/ A* l, T% g
8.3 多进程爬虫153
1 G) ?: t( |4 X# S9 _8.3.1 使用multiprocessing的多进程爬虫153
- T. E& m0 G$ L( m8.3.2 使用Pool + Queue的多进程爬虫155
" W4 L; \5 C( _) w9 o* G N# d7 F$ l8.4 多协程爬虫158
) ]" O* b/ m0 G- D, v J8.5 总结160. ~! [$ B$ s5 }6 {' r! r8 m/ y
第9章 反爬虫问题163% d9 K# _( ^% u6 ]7 o5 B
9.1 为什么会被反爬虫1647 ?9 \, A3 F, ^" a
9.2 反爬虫的方式有哪些164
/ P7 E( H. c* m- R9.2.1 不返回网页165
# A: _5 E, N" d6 S+ P# ^3 ^9.2.2 返回非目标网页165
( o, \: x9 `! L0 s! p& U9.2.3 获取数据变难1663 T+ e9 z) ]( h
9.3 如何“反反爬虫”167
# o/ D; F% K+ P; g3 w9.3.1 修改请求头167
! \/ v. q! Y, g* v J/ `) K9.3.2 修改爬虫的间隔时间168
2 c: Z3 D0 {9 }' Y0 I0 z9.3.3 使用代理171% ^$ [/ u0 |/ @ s' t% S/ d) Z" ]
9.3.4 更换IP地址172# c# D: U/ K$ G4 A
9.3.5 登录获取数据172 t/ Q1 x4 m" d, a: Z4 o
9.4 总结172- x4 j4 o: q% l( j2 Z0 J
第10章 解决中文乱码1731 s# o+ X( f) Q' J t& q& j; i
10.1 什么是字符编码1746 @8 }5 C* a2 Y6 I! b8 i
10.2 Python的字符编码176- r, y: C/ U9 j! o. S! w/ J7 V {
10.3 解决中文编码问题179
- O% x5 T9 O9 ]. [0 u7 b10.3.1 问题1:获取网站的中文显示乱码179
, ~- |, L) W0 n6 e8 d8 y+ m3 A10.3.2 问题2:非法字符抛出异常180$ b/ q. W& m' ], |. Y8 n
10.3.3 问题3:网页使用gzip压缩1813 ^- w# H! W, ^7 n
10.3.4 问题4:读写文件的中文乱码182
$ P$ G5 K6 _( w3 L- s3 y10.4 总结184
# t% B) l5 X. Z5 ]7 P6 ?. x第11章 登录与验证码处理185
% m3 k& g. Q" b! O4 P11.1 处理登录表单186" S# b2 ?* ~6 b2 O
11.1.1 处理登录表单186
' a, t; I0 h' V. q9 ?/ Y$ p11.1.2 处理cookies,让网页记住你的登录190 y' n F$ {2 o, i) l5 [
11.1.3 完整的登录代码193
4 r/ q7 Q3 m; p G$ b) i11.2 验证码的处理194
, d% B" V; G6 Y; a3 C( ~11.2.1 如何使用验证码验证195 n9 Q) l) Z5 K) `1 X: E7 L
11.2.2 人工方法处理验证码197
+ s) G2 B/ A Q) M7 {11.2.3 OCR处理验证码200
. k5 x* x/ {& Q9 @9 S1 ?11.3 总结203; [* V6 j' Q; X! C
第12章 服务器采集204
/ D& _8 c! J' K, k: k& y8 Z
( x! i7 c2 q* H' z此书已加入到VIP会员卡,只要购买VIP会员卡即可免费阅读上百本电子书,这张VIP卡除了免费让你读书,还有更多的权益等你来领,往下↓拉. z+ c3 O/ K9 t+ Z' q2 D1 e
* I6 k# c3 ?/ T0 W; X" _! @" S8 }% i" g" ^# q
阅读电子书的方法如下:
9 t6 C- M9 ~2 y% M( w
# U7 ?/ P( z, \打开CSDN APP(软件商城搜索“CSDN”即可找到哦)—>登录CSDN账号—>学习—>电子书
" v3 z/ ^& D( W
; b: r7 o7 q" ]
; J9 v7 m* K' A. ~1 H" Z————————————————
2 Z2 t2 N7 h2 Y" {* d4 L; U版权声明:本文为CSDN博主「好书精选」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。1 v0 ~! S% W: x/ @
原文链接:https://blog.csdn.net/weixin_37649168/article/details/104265388, Z5 ? O- O& U5 d5 C
4 f% A; m/ J) S1 ]
. I2 Q- S5 O( ? |
zan
|