- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 566752 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 175248
- 相册
- 1
- 日志
- 0
- 记录
- 0
- 帖子
- 5313
- 主题
- 5273
- 精华
- 3
- 分享
- 0
- 好友
- 163
TA的每日心情 | 开心 2021-8-11 17:59 |
|---|
签到天数: 17 天 [LV.4]偶尔看看III 网络挑战赛参赛者 网络挑战赛参赛者 - 自我介绍
- 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
 群组: 2018美赛大象算法课程 群组: 2018美赛护航培训课程 群组: 2019年 数学中国站长建 群组: 2019年数据分析师课程 群组: 2018年大象老师国赛优 |
教你如何编写第一个简单的爬虫. N, S' ^6 U: B
很多人知道爬虫,也很想利用爬虫去爬取自己想要的数据,那么爬虫到底怎么用呢?今天就教大家编写一个简单的爬虫。
; S+ ?9 {3 F* q$ m
) l5 T' j9 z# t1 f' P下面以爬取笔者的个人博客网站为例获取第一篇文章的标题名称,教大家学会一个简单的爬虫。% t" \ I/ ?7 v4 \
1 o4 l# |) b" X- M
第一步:获取页面
g" a- j* W( ^2 T+ f6 X, r- E" y, |5 b- }( B+ |5 x, S
#!/usr/bin/python1 M9 P0 V1 x- V$ x' D
# coding: utf-8: M; r+ t8 _' x4 F) j' s2 G* K- m
& k" T4 s$ U& E2 R/ k4 K' U0 _+ b
import requests #引入包requests
$ M* n! o2 I% t9 {% hlink = "http://www.santostang.com/" #定义link为目标网页地址* R/ _# u# k0 L# f: _
# 定义请求头的浏览器代理,伪装成浏览器( U- w& T4 A' g. X; g2 `
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'}
3 i' X6 {& S, P x) K# S4 h2 l) c4 k. G; k: ^0 J$ T" i$ i
r = requests.get(link, headers= headers) #请求网页. D6 t( k$ Y4 Y s
print (r.text) #r.text是获取的网页内容代码. u( ~4 Q" x8 x
1
0 Y& a2 R8 Z/ A/ M2
/ F! r d5 @0 {( a+ {* e- Y( t3
/ E, R _: q" |6 D- f9 l& K4, d' u# C" n; O6 |8 {( J/ }6 ^
5; B. { o, Z3 `, V7 D
6
+ u3 p, j0 G2 P1 r" r; Q- m) M7
" h3 `% `: S* z! ^2 C8 G, P ]) X1 D3 U5 N
9" C- C5 V7 [; R+ m. u* J2 D& r
10; u$ p) i6 I5 t
上述代码就能获取博客首页的HTML代码,HTML是用来描述网页的一种语言,也就是说网页呈现的内容背后都是HTML代码。如果你对HTML不熟悉的话,可以先去w3school(http://www.w3school.com.cn/html/index.asp)学习一下,大概花上几个小时就可以了解HTML。
2 v8 }4 P" O/ U6 G
1 z, ^ C6 Z8 [% r# M在上述代码中,首先import requests引入包requests,之后获取网页。
* a% r1 `' }6 {- u3 w
5 b" m7 U: c$ w4 y3 s/ T(1)首先定义link为目标网页地址。
3 B/ b4 K1 \7 r1 T0 e4 B) f
- I; E4 ^+ n) J4 X, z8 e, m$ h(2)之后用headers来定义请求头的浏览器代理,进行伪装
4 G2 o8 T1 J# ~/ a+ ~1 K/ _+ x- ~7 r4 C3 G
(3)r是requests的Response回复对象,我们从中可以获取想要的信息。r.text是获取的网页内容代码。: e; W! l. @% l5 k0 Q
- f9 a' ~; i- Y! i运行上述代码得到的结果如图所示。
$ D' T# Z& }0 O& i8 M$ M; g
- V" p4 k7 q- E0 j7 u6 V
4 x& J+ [, j+ {/ L第二步:提取需要的数据4 b( c. P0 }4 i; b& ^
- u" U8 [& r; P# `/ E
#!/usr/bin/python% e1 o3 ~# e6 J* A$ E& t2 D7 f
# coding: utf-8
, q/ |( ]! k0 z. ]
; _0 R+ F5 n3 H1 y$ a5 Kimport requests) H# e9 Q1 B1 X' D
from bs4 import BeautifulSoup #从bs4这个库中导入BeautifulSoup
" D& ]; B$ H3 m$ p( F& \$ l+ w2 P/ u) u: N8 e3 H1 T$ K# F
link = "http://www.santostang.com/"- U. O0 G+ Y7 q3 }
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'} 2 I% E! \; i% z. \9 m# |
r = requests.get(link, headers= headers)
: x6 x* t) R3 H/ x3 b4 a3 @7 v0 s1 f: K0 l/ M) X
soup = BeautifulSoup(r.text, "html.parser") #使用BeautifulSoup解析* Y2 n+ F N6 B
; \7 a* E/ O7 A+ j7 e#找到第一篇文章标题,定位到class是"post-title"的h1元素,提取a,提取a里面的字符串,strip()去除左右空格
4 {, H6 W& I- ^' X [) dtitle = soup.find("h1", class_="post-title").a.text.strip()
" R5 l5 p' P. S4 |( h1 Y) P8 kprint (title)) X4 I B, a$ D# g' E/ |& B+ S
1
5 ^! Z: F$ O- z) ^$ p2- G4 s! z/ t9 p" \0 Z
3
3 d' d$ }1 }* S* Z& h: m! Y4
: \. n& D/ j( ^: z ^# ^58 W) n# I. _1 G. {! I8 Z; \
6
# k5 [8 {7 x" x0 B+ ~- }7# I' R; i! h0 A
8
( U# X: b8 k \( e' p" s9
9 t, B9 G+ C# t7 H; Z0 _' ?10
/ S j* ?9 w7 S, F11
7 P/ h/ Z y) U- ^. Q. ]12 x) O$ E; p. m- s
13
$ v/ N) d$ ]. @3 r \( q14$ @$ [6 [6 I6 D, f5 W
15
$ M# J+ q/ H* y, Z( Y1 M在获取整个页面的HTML代码后,我们需要从整个网页中提取第一篇文章的标题。
/ ^0 ^/ @+ G5 N4 g# t
* S- D8 F, Q J3 B B这里用到BeautifulSoup这个库对页面进行解析,BeautifulSoup将会在第4章进行详细讲解。首先需要导入这个库,然后把HTML代码转化为soup对象,接下来用soup.find(“h1”,class_=“post-title”).a.text.strip()得到第一篇文章的标题,并且打印出来& g! M) R9 T3 O' b8 q' M) U" ?
5 Y' m, d4 }5 E5 D! Q8 Q& Tsoup.find(“h1”,class_=“post-title”).a.text.strip()的意思是,找到第一篇文章标题,定位到class是"post-title"的h1元素,提取a元素,提取a元素里面的字符串,strip()去除左右空格。
1 b+ b: n9 h$ s3 o7 d0 _) a7 }$ T0 \5 Z! J+ ^9 g. G
对初学者来说,使用BeautifulSoup从网页中提取需要的数据更加简单易用。9 R7 P& Q! w+ d/ u% f ~9 |: m; s$ j
" g5 i$ f' O# h2 n$ U$ M( t
那么,我们怎么从那么长的代码中准确找到标题的位置呢?
! I ?9 y& h# f/ q9 j, P9 |$ M7 w6 s0 A9 `$ W" D
这里就要隆重介绍Chrome浏览器的“检查(审查元素)”功能了。下面介绍找到需要元素的步骤。3 o# d6 ^0 ]$ e" d
; B: _& t( c! {* \1 f& h% X步骤01 使用Chrome浏览器打开博客首页www.santostang.com。右击网页页面,在弹出的快捷菜单中单击“检查”命令,如图2-17所示。/ L/ v% S" Q z% O
' G) Q: E5 v1 D" B8 c& o0 f
+ c4 l9 Q& o# @% q2 c5 \/ q
: N! [" c! H# R( t步骤02 出现如图2-18所示的审查元素页面。单击左上角的鼠标键按钮,然后在页面上单击想要的数据,下面的Elements会出现相应的code所在的地方,就定位到想要的元素了。; t$ f, m9 P4 T5 l# N( ]
0 D1 r" g5 X; @1 `9 s* h
+ C- s, w3 B" Z; t1 Y+ U( y4 m: }$ X( e4 _: ~
图2-18 审查元素页面; Y9 d1 m; {6 y# s5 f/ G3 H, h) [
步骤03 在代码中找到标蓝色的地方,为) `$ q. F) }: U) l. h# F) {
* R u# ^' P4 |/ J% |! gecharts学习笔记(2)–同一页面多图表。我们可以用soup.find("h1",class_="post-title").a.text.strip()提取该博文的标题。
# S3 h' ^0 b7 L- }* ?
V0 C/ x& Q) X Q2 N v1 d% t* J第三步:存储数据
" m0 t' E* ~( n5 |
0 e; h) S+ ?$ o) \import requests
" } D ]4 U& f! ]% ^: V( N Ffrom bs4 import BeautifulSoup #从bs4这个库中导入BeautifulSoup. f! t# ^) O. H
- _4 j% N! q8 Q5 K
link = "http://www.santostang.com/"; u/ H3 o! N' r( Q+ J
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'} & i5 ? ]& e9 u9 z8 u) W9 P: o
r = requests.get(link, headers= headers)
; i2 S! z ~" Q& g! w! z x0 [
1 i9 W( h( Y6 S. Ksoup = BeautifulSoup(r.text, "html.parser") #使用BeautifulSoup解析
2 N1 P5 { ?/ k" K @; Utitle = soup.find("h1", class_="post-title").a.text.strip()$ v( F0 @ y: G; X r7 d
print (title)* B' {6 K/ M; z9 J: k' v9 ~/ S
, H! c3 D0 {, {: a5 X7 y# 打开一个空白的txt,然后使用f.write写入刚刚的字符串title% G4 ~: p- P4 Z) k/ Q" Z
with open('title_test.txt', "a+") as f:
! t+ U* D- ? \% U f.write(title)4 s# C2 C; ^4 J7 j/ h
1
2 \1 X) q' ~, q$ n. d2
0 j) a% D7 e/ K4 B4 O36 B: ?: K3 X/ w$ }' n7 Z$ F
4
8 x) C% V }; ^0 e# H$ h0 |5
' |- o: Y" S. N! x0 U" f6
y1 [2 N8 k2 g* M: |7# u- G3 h0 p% K( Y, D0 k! [) Y
8
5 ^2 N6 z+ ]9 U9: D0 ?( |) @" p8 F$ u
10
: \& Z. i( G# r! J7 ]11
# Q" ?; Z! E: |3 Y4 q4 ~$ s+ K6 ?6 y12
/ K2 \2 g9 ?& m5 c* |# m13
. u6 K! a5 g! j; K& W147 S' ^- L( x$ C3 n, l" s% T- H5 T, d
存储到本地的txt文件非常简单,在第二步的基础上加上2行代码就可以把这个字符串保存在text中,并存储到本地。txt文件地址应该和你的Python文件放在同一个文件夹。1 @) g- x8 \1 _/ }4 m7 V: p2 f
. T* W4 T: M3 |, E& p
返回文件夹,打开title.txt文件,其中的内容如图2-19所示。0 R- d% ?6 g- R( n3 Z Q; T
; S3 X; e8 s, e8 y! B. W
以上内容就是本节要介绍的如何编写一个简单的爬虫的步骤,想要学更多爬虫相关的内容,可以到这本书里查哦《Python网络爬虫从入门到实践(第2版)》( F1 D9 ?( [# U
: ?4 r- F4 n' k3 N \
3 _4 B0 ?% V7 E: g' H目录: w# z8 W8 [) N4 v& o
, g7 N. B6 h( n) ^6 J前言' I, ]) L: N. U9 [. B+ M
第1章 网络爬虫入门1
5 V3 E% S' d* E& @1.1 为什么要学网络爬虫2
" M$ ^/ R) Z& k. }: {1.1.1 网络爬虫能带来什么好处2
' `, S' K; G& s. K3 P1.1.2 能从网络上爬取什么数据3
7 m3 F. j6 w, R* v2 @6 e! D0 Z1.1.3 应不应该学爬虫3
& g; Y% o& j1 u( q) @- k1.2 网络爬虫是否合法35 m$ @' s8 B8 N6 u( _
1.2.1 Robots协议46 ^& N. T v/ l# @2 A, T' d$ S
1.2.2 网络爬虫的约束5- U" E- V& ` A0 o
1.3 网络爬虫的基本议题6
/ A. X: \! y7 D0 o4 Y1.3.1 Python爬虫的流程73 ?5 ^# R3 s# e$ o" W- F8 z5 e1 r
1.3.2 三个流程的技术实现7
$ C) ]' S; N9 ~# T5 J) S8 V第2章 编写第一个网络爬虫9
) v2 E" h; O' \: Y2.1 搭建Python平台10
$ i6 V7 t5 j6 n% b% x( c2.1.1 Python的安装100 t! {: ?' Q, w0 U- r
2.1.2 使用pip安装第三方库12: r6 J+ _& Y0 L7 F* W
2.1.3 使用编辑器Jupyter 编程13
1 W' f2 j7 l% N2 b; A: w9 o) W9 k2.1.4 使用编辑器Pycharm编程155 L2 N* D T8 n. G+ N
2.2 Python 使用入门18
* c) ?6 G. z6 Y' j; ]$ [2.2.1 基本命令18/ ~5 A' w& A" F
2.2.2 数据类型19# C& v; L/ s" C s
2.2.3 条件语句和循环语句21
% P5 t, s5 r9 |3 e+ C2.2.4 函数23
. D0 c6 S5 H0 j) P2.2.5 面向对象编程245 t. t% U! @1 I5 A+ Z
2.2.6 错误处理28
4 T6 j v' _1 y# Z9 }5 z. n/ @2.3 编写第一个简单的爬虫29& K& X: I* Q! \, m) q
2.3.1 第一步:获取页面29
1 w/ a7 `- C: Y2 M2.3.2 第二步:提取需要的数据30' b- x5 S4 n( O2 G
2.3.3 第三步:存储数据32. h! K' X {# X E9 q8 g. r! F: c
2.4 Python实践:基础巩固33
5 Z$ v/ p/ h- b/ D. W/ d* b2.4.1 Python基础试题34& @' | u4 p. V( U ~+ e. M$ O1 D1 S
2.4.2 参考答案35
' g2 U% ?' J6 O# j' ~, S5 j/ |2.4.3 自我实践题381 _7 ^* D H% j! N4 E- @" b Z/ H% @
第3章 静态网页抓取39
4 J( N- {6 B* `. f! x5 O3.1 安装Requests40
1 o+ Q ]8 i$ L# x& i3 Z; Q3.2 获取响应内容40
( L9 }& }+ C) v0 I, u3.3 定制Requests41
( O( Z L/ W6 ]3.3.1 传递URL参数41" r/ [, E- a$ j+ |' {8 P4 @
3.3.2 定制请求头420 @6 o/ F# d/ }. W( R% h# t/ n! u
3.3.3 发送POST请求43
3 {; g7 t# ~1 E9 p2 d3.3.4 超时445 Z3 c* l* O$ x5 j
3.4 Requests爬虫实践:TOP250电影数据444 g9 ]* n" m2 W# V d* q
3.4.1 网站分析45
" n1 D* _5 a( V# E% r z+ n8 O3.4.2 项目实践45
/ ]7 ^( x, J6 U. d( [/ h3.4.3 自我实践题473 v6 W2 D: n& O
第4章 动态网页抓取488 a3 M$ q1 ~) e! E1 k/ e
4.1 动态抓取的实例49; |$ h( F5 B( z( `
4.2 解析真实地址抓取50
/ N: O3 K v0 k3 Z4 u" _4.3 通过Selenium模拟浏览器抓取559 b( O0 b/ E% U& N
4.3.1 Selenium的安装与基本介绍55
; C) M5 k0 y7 B5 \+ V1 C' O3 c4.3.2 Selenium的实践案例57) }6 X7 p$ q; h4 X+ p2 @9 z# F
4.3.3 Selenium获取文章的所有评论58
o7 s6 d6 f+ l: q4.3.4 Selenium的高级操作61! {) Q& e5 q. S! R) S
4.4 Selenium爬虫实践:深圳短租数据64
4 @% C. }" }: p2 u& ^' U4.4.1 网站分析64: R! [$ ^$ Q" M; u0 G2 U
4.4.2 项目实践661 v% G. R) v7 l {% J5 {3 |
4.4.3 自我实践题69
/ s! ~6 A: g, G! `- \第5章 解析网页70" {$ f' d Z b- X6 T# T. q
5.1 使用正则表达式解析网页71
; s2 R6 A8 [ [ c+ G+ O0 w4 @: t5.1.1 re.match方法713 S1 E8 j: V& x& R
5.1.2 re.search方法74
2 Y6 |. O/ v9 J! j V5.1.3 re.findall方法74
5 \, w' \) g. \1 C+ A: h5.2 使用BeautifulSoup解析网页76; O9 b( }' R, k
5.2.1 BeautifulSoup的安装76" Z4 f$ }( P" s
5.2.2 使用BeautifulSoup获取博客标题77
; f* U0 }) u% B! f/ b6 v5.2.3 BeautifulSoup的其他功能78; v3 ^& R! u- z7 M3 S: G
5.3 使用lxml解析网页823 K& @; @; @2 F
5.3.1 lxml的安装82; J, g. l$ {; B. B& p' Y4 M8 _! P
5.3.2 使用lxml获取博客标题82- q4 v# x9 K2 x
5.3.3 XPath的选取方法84
/ |: I& R. g3 _7 D; ~5.4 总结85
6 Q! ]* k. m, _( T5.5 BeautifulSoup爬虫实践:房屋价格数据86
2 I9 C0 G2 {1 y# g' R% y5.5.1 网站分析86
9 K" Y7 u X' P6 `5.5.2 项目实践87+ f3 N) H, q* k8 P c
5.5.3 自我实践题89
) A7 w: r4 n/ g/ M D2 s" l* Z6 ^第6章 数据存储90
* _* I8 U8 A& ^" a8 [8 o6.1 基本存储:存储至TXT或CSV91
( P9 ?9 `; ]) A- ]* q ^6.1.1 把数据存储至TXT91# c8 _0 v2 F/ D8 \8 Q9 O& p
6.1.2 把数据存储至CSV93# B: ]( [2 M2 F, K2 h& y* f
6.2 存储至MySQL数据库94; g/ U& X, R+ V2 F1 Q/ s/ V" I& ?7 T
6.2.1 下载安装MySQL95
3 N& U7 l/ u m4 C1 z& m% C6.2.2 MySQL的基本操作99; v0 o9 c: u3 ~$ D% l4 u0 [
6.2.3 Python操作MySQL数据库104' t1 ]& I( i1 Y! F, p4 D& X$ L
6.3 存储至MongoDB数据库1066 b. z+ h) @3 Z
6.3.1 下载安装MongoDB1071 x) \3 q1 R, h
6.3.2 MongoDB的基本概念110 A6 y! }' P, d. ^- h
6.3.3 Python操作MongoDB数据库112
, c; Y# t1 C4 E, u( }$ Y! B6.3.4 RoboMongo的安装与使用113; P8 [- [$ i6 }
6.4 总结115# p+ A( \1 L* C3 w5 i3 v
6.5 MongoDB爬虫实践:虎扑论坛116
# k+ Y; o3 h0 O5 c, m6.5.1 网站分析1163 s! Z* r/ j2 L! w- ~+ s! {' Y/ X( d
6.5.2 项目实践1178 V9 T6 i+ M2 h. l2 |6 c( {" W; b
6.5.3 自我实践题123
, \3 r+ F/ x* K9 C6 D第7章 Scrapy框架124
$ r7 g, c* l4 ?8 {8 w. n7 j y. e7.1 Scrapy是什么125$ m# w4 W N3 Y! j$ n) H8 E( x& _
7.1.1 Scrapy架构1254 d; l4 @ {" \5 g+ a4 f% v
7.1.2 Scrapy数据流(Data Flow)126
5 F& O1 p$ P9 z8 U, i7 F7.1.3 选择Scrapy还是Requests+bs4127
) R# D6 p* n9 z! _7.2 安装Scrapy128 M: M2 s$ j! W6 Q0 ]: t {
7.3 通过Scrapy抓取博客1288 Q/ j4 E( c- Y
7.3.1 创建一个Scrapy项目128
2 n* s2 b) w( |) J( _ q7.3.2 获取博客网页并保存129
. N: P, ~/ X# I) E% h7.3.3 提取博客标题和链接数据131
0 C2 ] s" O9 m' X/ t7 }- {0 H7.3.4 存储博客标题和链接数据133
4 {8 p: Z8 h1 p+ t+ c7.3.5 获取文章内容134 Y: Z- d7 s- y$ X/ t; k; h
7.3.6 Scrapy的设置文件136
! J! c8 j* A% K" @8 g2 {/ J7.4 Scrapy爬虫实践:财经新闻数据137$ a" R6 I ]# x0 }+ P
7.4.1 网站分析137
) T3 l+ T3 F x% e4 a# Q; M6 y, H' a7.4.2 项目实践1383 r/ Z6 q/ Y3 }: A# R
7.4.3 自我实践题141) x; G8 k" v8 R/ T( {' m1 Y7 A
第8章 提升爬虫的速度142* B8 p5 P& s6 ~# v; l) J/ U
8.1 并发和并行,同步和异步143
% q+ K- L1 g( P4 W T; l" G8.1.1 并发和并行143
7 k9 t J; a) v9 P! N8.1.2 同步和异步143. Y! M# {6 u* Q \# i6 y3 u
8.2 多线程爬虫144) ?$ |7 E4 D: }" b
8.2.1 简单的单线程爬虫1458 n) q% V; D: g! `8 \" l4 w+ N
8.2.2 学习Python多线程145) ]1 i* m' l; g" M; U I9 H
8.2.3 简单的多线程爬虫148
9 B5 Z: p& d) b0 d' V, u3 U0 g9 O8.2.4 使用Queue的多线程爬虫150" P+ l; Q5 a5 q8 N; V
8.3 多进程爬虫153: ~; A0 `# t4 m+ {, M7 N( u2 R
8.3.1 使用multiprocessing的多进程爬虫1530 L! q3 B5 |6 R; D% I
8.3.2 使用Pool + Queue的多进程爬虫155
: y+ S, e5 x9 H( q4 J8 _6 w8 B8.4 多协程爬虫158, C" p3 d. H K: h; G- O3 K% j: k
8.5 总结1606 Y& `5 m, Z- s, s# v" H
第9章 反爬虫问题163* A# _6 M: g* w$ Q
9.1 为什么会被反爬虫164 m* _+ c4 h& f1 e$ o$ d0 N
9.2 反爬虫的方式有哪些164
- I' c& Q) K7 o, j4 O. ^, g3 d9.2.1 不返回网页165' {* {# e. \- X7 {- e) o/ u
9.2.2 返回非目标网页165
$ F' r( \8 [- c8 X9.2.3 获取数据变难166
! v& M/ Z; R6 |9.3 如何“反反爬虫”167
: n. K8 P6 F" `2 b% ^1 u, h& x% W( B9.3.1 修改请求头167" r6 u7 Z% ~: _4 i! L' l) @) i
9.3.2 修改爬虫的间隔时间168
5 N7 n0 O4 t; }! {) @" `& b9.3.3 使用代理171) t1 @6 O4 S4 W* e# @* h4 j
9.3.4 更换IP地址172
! n' Q$ [/ |* O6 F) v6 k! F9.3.5 登录获取数据172
( ]; H7 O- k. v) y" O* J( M9.4 总结172
& o3 f3 Y6 p' ?2 ?+ N9 O9 ] Q第10章 解决中文乱码173
" F! K# `% c l3 G10.1 什么是字符编码174
5 o" G% y& ?5 f- ^10.2 Python的字符编码176
+ q- Y/ ^5 n9 x$ |. j10.3 解决中文编码问题179
/ L, J V+ o/ {# S- ~6 J10.3.1 问题1:获取网站的中文显示乱码179
3 G) l; E8 M8 Z, x10.3.2 问题2:非法字符抛出异常180
) G0 a. i* d7 @8 T$ d10.3.3 问题3:网页使用gzip压缩181
4 O# U% l, U& p X; o' n; x10.3.4 问题4:读写文件的中文乱码182
& x i8 ?% ^% a R0 f10.4 总结184
1 p k( I- U& x2 W$ x第11章 登录与验证码处理185
2 N) C% A! K3 X11.1 处理登录表单186
" r; ?$ j8 `+ p: Y11.1.1 处理登录表单186
2 S) k% |% w( j& e* u5 ?# T O1 U11.1.2 处理cookies,让网页记住你的登录190
- Q3 M( z; L$ n. l# _( i11.1.3 完整的登录代码193: W0 P# p2 Z: Y1 M( t+ \7 p t5 S
11.2 验证码的处理194
: `& J# T# g% l! ]; G2 G: p11.2.1 如何使用验证码验证195. @4 P, W% l! ?4 C' }: _" W
11.2.2 人工方法处理验证码197
- E$ f7 p6 I% L; ]7 d11.2.3 OCR处理验证码2007 F: F) ^- |( L4 I) p8 u, p$ X
11.3 总结203
! _5 G$ q/ w4 z0 i第12章 服务器采集204 w- L @; X( ]% H3 z6 c6 ?. E
+ R2 `% D6 O0 a, O4 t! a此书已加入到VIP会员卡,只要购买VIP会员卡即可免费阅读上百本电子书,这张VIP卡除了免费让你读书,还有更多的权益等你来领,往下↓拉
+ `; A4 Y( P2 O6 s1 c1 h7 |* e* O! F2 _# H1 t. |) P8 [* U
. u8 Y1 d( y) G8 |2 g% |
阅读电子书的方法如下:! @$ ~& }. H6 c9 ^( s6 [) W$ P7 z& K8 w3 b
3 e2 ~# m) p* t5 g ~& B3 D
打开CSDN APP(软件商城搜索“CSDN”即可找到哦)—>登录CSDN账号—>学习—>电子书
8 f) T) D5 f5 K# C
4 ?, E3 ]' _% w3 H5 n6 p5 j
( s' m8 V4 Y; M" U1 |+ C————————————————
, ]1 n- g) @, A$ R0 M) o9 z版权声明:本文为CSDN博主「好书精选」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
5 e( v0 C& d) ^+ q1 d/ h$ A原文链接:https://blog.csdn.net/weixin_37649168/article/details/104265388
6 S+ M1 ^* z" O& s- C+ M' i: O9 h5 j% i7 i
, c4 ~# C: ~/ i( \
|
zan
|