- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 560357 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 173480
- 相册
- 1
- 日志
- 0
- 记录
- 0
- 帖子
- 5313
- 主题
- 5273
- 精华
- 18
- 分享
- 0
- 好友
- 163
TA的每日心情 | 开心 2021-8-11 17:59 |
---|
签到天数: 17 天 [LV.4]偶尔看看III 网络挑战赛参赛者 网络挑战赛参赛者 - 自我介绍
- 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
 群组: 2018美赛大象算法课程 群组: 2018美赛护航培训课程 群组: 2019年 数学中国站长建 群组: 2019年数据分析师课程 群组: 2018年大象老师国赛优 |
教你如何编写第一个简单的爬虫' L3 r: x/ ]! P. A; n
很多人知道爬虫,也很想利用爬虫去爬取自己想要的数据,那么爬虫到底怎么用呢?今天就教大家编写一个简单的爬虫。: g5 w) F4 Q/ I
& {% g9 ?! _& e下面以爬取笔者的个人博客网站为例获取第一篇文章的标题名称,教大家学会一个简单的爬虫。
2 M, V$ j* ~1 I( h0 R a
6 w$ @$ X r ?! j/ z第一步:获取页面
5 O& i R+ Y2 x' w# G1 O
' v! N" r* r" B! h# G& \#!/usr/bin/python. s6 f7 x/ R7 f
# coding: utf-8
! ]% l# f4 A2 L: `9 F
) l4 u/ h$ Z( A1 \import requests #引入包requests
7 Q1 ?2 Y2 O( U3 K! jlink = "http://www.santostang.com/" #定义link为目标网页地址2 J! B1 O5 `* Y& \# o8 ~
# 定义请求头的浏览器代理,伪装成浏览器
1 S6 C; j9 G3 q4 ?7 A: L7 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'}
( X b9 R5 k5 k% u, x( h/ h0 K. R9 n/ ^! R& h( _* H( y9 N
r = requests.get(link, headers= headers) #请求网页. W2 n6 e; d6 D6 N4 b
print (r.text) #r.text是获取的网页内容代码) @6 L- }8 k9 s9 y; Y/ `
1
6 E! K, ]% p6 o) C8 h2" ~2 J$ A( s' y
3! F# c' O8 s; j9 ~
4
; u9 K9 J; |: b- p7 W2 Z5
7 q9 m" A# D7 D9 c6
+ c' l1 U+ }+ z7 n9 B7
( x1 }/ O# ]* ]2 x$ P2 G8
8 N z( F8 t7 E. ]% b: ~4 O$ N' q9
* `, d9 _& h: b' y$ ^, h10" |) |5 O5 @6 L9 m' G7 s
上述代码就能获取博客首页的HTML代码,HTML是用来描述网页的一种语言,也就是说网页呈现的内容背后都是HTML代码。如果你对HTML不熟悉的话,可以先去w3school(http://www.w3school.com.cn/html/index.asp)学习一下,大概花上几个小时就可以了解HTML。
7 W8 |$ @& V' \* N R1 p ^/ R
. U$ r3 U# s6 u0 c8 d- b在上述代码中,首先import requests引入包requests,之后获取网页。3 ^+ y4 @: {) k
& g1 F8 T7 z* K5 h, `" k9 B' Z* r(1)首先定义link为目标网页地址。/ |2 J- P) w3 [, G7 `" b9 c
$ U$ A y% b2 r% \/ u3 j2 C
(2)之后用headers来定义请求头的浏览器代理,进行伪装8 Y3 l+ B: Z" b" w
9 A8 U" r: L8 z- q& R5 j
(3)r是requests的Response回复对象,我们从中可以获取想要的信息。r.text是获取的网页内容代码。& g: O$ L! _4 X# ?9 U
1 I. v& Z: r6 R3 ^/ y% w2 ~9 y. j5 \
运行上述代码得到的结果如图所示。
5 U/ G3 O2 b: l# B0 I. I; V1 I$ q$ H! ]6 O3 y; S7 `2 U
! b o. ~ k6 j e
第二步:提取需要的数据1 D" _; w0 ~& k. j0 S' @# F
& v" B$ a1 W- V8 y
#!/usr/bin/python6 U# h7 s2 Y- b
# coding: utf-87 J0 Y: f5 F2 P/ c# W, j" o
% Y/ `+ W2 A; p( o. M. k" g. pimport requests
s5 u _" A5 |' T$ a" N0 {% D2 m# Nfrom bs4 import BeautifulSoup #从bs4这个库中导入BeautifulSoup
5 A0 s: E0 `" F/ |! t9 J. H# E# X) ]0 {7 e5 d
link = "http://www.santostang.com/"5 t( R, @$ N9 ]
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 W6 j8 U% Q: S+ w4 F" Q Lr = requests.get(link, headers= headers)
! t7 J' u* d G# R+ ]/ l$ a6 C+ H; D4 W( M9 |+ W8 @# g& o; h& ?
soup = BeautifulSoup(r.text, "html.parser") #使用BeautifulSoup解析
7 P) p5 ^/ J! m C/ L o; S7 ?5 `. f
#找到第一篇文章标题,定位到class是"post-title"的h1元素,提取a,提取a里面的字符串,strip()去除左右空格( }" E) D: P6 m, P: o! C
title = soup.find("h1", class_="post-title").a.text.strip()
, I7 U9 p5 s5 [' dprint (title)
: s+ S0 h( l# I; M1
9 q7 N; x: ]- R# A$ f2: c7 C& A# N/ Q' G$ U
3
`2 u; C& Q @1 F4
) N# M3 t1 D' ^7 t5: v* Z& y; T( `; Q+ G: Y. @! U! H
6
# ]6 X, j- r& t' ~( v2 ]% a7& {# l; U$ y+ K: v' Z( K. w
8" u9 C( c' f! U6 a
9
$ S/ D/ ?( t" u3 k101 F! x# H7 ]6 U: k. O# c
11 s. ?. R o/ {# k
12) ]) e3 s# W6 d3 Y5 Y1 s. P2 ^
13
8 L' | Y9 a% q' a' P% s14" O: v6 B6 t0 z
15
. w; X0 a1 W7 G/ `* F! l在获取整个页面的HTML代码后,我们需要从整个网页中提取第一篇文章的标题。
8 o& v% r& T" ^
9 R3 y' L' n% O9 R6 }这里用到BeautifulSoup这个库对页面进行解析,BeautifulSoup将会在第4章进行详细讲解。首先需要导入这个库,然后把HTML代码转化为soup对象,接下来用soup.find(“h1”,class_=“post-title”).a.text.strip()得到第一篇文章的标题,并且打印出来
4 N! }0 v1 X/ \$ W) U) }- r( X! u
7 J Z8 }! X4 ~ Dsoup.find(“h1”,class_=“post-title”).a.text.strip()的意思是,找到第一篇文章标题,定位到class是"post-title"的h1元素,提取a元素,提取a元素里面的字符串,strip()去除左右空格。" \3 o- }( i2 g- D
* j' u7 A- N7 s9 `4 }$ t对初学者来说,使用BeautifulSoup从网页中提取需要的数据更加简单易用。. H3 K- H6 X* K: t: {
, [: c9 r- g/ C7 ~- M: g3 y" O6 `那么,我们怎么从那么长的代码中准确找到标题的位置呢?4 E! x0 l: K6 I
) \8 S5 v( A, u0 K; U: S* |这里就要隆重介绍Chrome浏览器的“检查(审查元素)”功能了。下面介绍找到需要元素的步骤。8 t% m# L' x/ Q# z }. q
# O+ x K5 U! m2 D: C7 A% `步骤01 使用Chrome浏览器打开博客首页www.santostang.com。右击网页页面,在弹出的快捷菜单中单击“检查”命令,如图2-17所示。' V% X8 V I$ T8 |, ?
3 I( w/ X6 d8 x' R8 m) W5 h1 j
1 A0 z9 x5 E: F& X2 _) l4 d8 }0 x) j4 W% A/ l6 P! ^+ e) P1 k
步骤02 出现如图2-18所示的审查元素页面。单击左上角的鼠标键按钮,然后在页面上单击想要的数据,下面的Elements会出现相应的code所在的地方,就定位到想要的元素了。! H4 p; C) ]7 P
- D$ E9 I+ C7 c" Y$ U
% c4 v, j& k4 [+ s
4 C* a6 v$ l* _! E图2-18 审查元素页面$ [/ b7 R3 B+ n ~; A% U! n A% r
步骤03 在代码中找到标蓝色的地方,为
1 A) I- A# B0 \: B6 e/ c U7 h5 l; j' I
echarts学习笔记(2)–同一页面多图表。我们可以用soup.find("h1",class_="post-title").a.text.strip()提取该博文的标题。
! f' v6 r8 i, S6 F0 _/ \- q# r3 C2 `1 h; c: { y! ]. K" w6 M
第三步:存储数据# n; h$ I/ \. Z, G _! U
% v( P9 k* X' D5 [$ M; E3 yimport requests2 M" h3 Q0 a+ Q4 }/ T8 w
from bs4 import BeautifulSoup #从bs4这个库中导入BeautifulSoup7 \4 e& }+ N2 v3 g2 W
, l) U7 X0 b( _& N1 ^% e+ clink = "http://www.santostang.com/"
. d1 z4 N3 J9 J- uheaders = {'User-Agent' : 'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6'} * J1 C4 j" J6 o9 w% }2 }
r = requests.get(link, headers= headers)
9 F% X5 d* S" ^) H, `7 k
1 H8 l7 Y" ~5 E( z8 x" |% [9 lsoup = BeautifulSoup(r.text, "html.parser") #使用BeautifulSoup解析
4 c1 T2 h& s! Ktitle = soup.find("h1", class_="post-title").a.text.strip()
+ I5 O1 ^# b r3 fprint (title)
& q5 y8 P" W1 z/ L: M, s
7 |) o& {3 I3 I# n& v4 s6 o# 打开一个空白的txt,然后使用f.write写入刚刚的字符串title
( Y: u/ ?7 U; _& A) Swith open('title_test.txt', "a+") as f:# R0 \3 K `7 O1 D- C
f.write(title): ?0 ]+ Z. E2 M& B8 q0 P1 f/ m3 o
1* _1 G$ }1 i s
2
$ a/ @7 }/ }/ j7 i" U37 h4 O# V1 }% M& f; \! s5 b
4
0 r" O, L5 K1 R5
! j5 L6 Y, {9 E0 f# n( F68 L( g* _" y2 W( s! t0 H
7
( J7 q5 r9 _3 _; @4 J8
7 J; T$ C3 H7 l) }+ s6 {) E9 c! H9
+ v4 ]) ~) Y$ U* P1 y# D10" e; n4 M8 M% o5 U! f3 ?1 c
11
" r) |, ^# ^) _# i& M7 N121 F. m* z$ [, f& }5 j
13
0 O! |( q1 p/ |4 P14
/ H! m5 r5 Y3 B存储到本地的txt文件非常简单,在第二步的基础上加上2行代码就可以把这个字符串保存在text中,并存储到本地。txt文件地址应该和你的Python文件放在同一个文件夹。+ {/ I$ H+ B! y; s- d6 _. o8 @
' C" @, B: T" Y0 B" L返回文件夹,打开title.txt文件,其中的内容如图2-19所示。
! c/ c- r" c- D, @
9 y/ A7 Q: G* {0 {7 S以上内容就是本节要介绍的如何编写一个简单的爬虫的步骤,想要学更多爬虫相关的内容,可以到这本书里查哦《Python网络爬虫从入门到实践(第2版)》 l N+ `' \: {" W, l
" _$ D( r2 W( E; R) [$ R3 q
" W$ @: q' a; E: ^$ U) i目录
7 \; l9 g6 C1 g0 w
* l+ y4 _$ ^: p前言% o' @# b; ^3 }* {, ?
第1章 网络爬虫入门1* }: }5 X' }, B' O2 H7 n( R: A4 {
1.1 为什么要学网络爬虫2% N2 @9 ?7 Z1 z$ B5 N
1.1.1 网络爬虫能带来什么好处2# M( s5 P: C! u
1.1.2 能从网络上爬取什么数据30 a/ c h0 \! J# l
1.1.3 应不应该学爬虫3
/ {% w3 f, @- K: |# @+ Y* X' d! U( I1.2 网络爬虫是否合法3
0 j/ T1 N. V3 V1.2.1 Robots协议49 g' t. ~& M; y% ?
1.2.2 网络爬虫的约束5% A& D) B. B1 v1 B
1.3 网络爬虫的基本议题6
* N: e4 S; i* N! r1.3.1 Python爬虫的流程7
0 ~ Q0 d& t/ z* O6 F% y1.3.2 三个流程的技术实现7
) |" p! j, X7 ~; y/ L4 b第2章 编写第一个网络爬虫9
9 @' k' G1 T( n2 B5 T2.1 搭建Python平台106 G3 T. e6 @* r
2.1.1 Python的安装101 _: w" X# X# i0 Q0 B4 R- @9 {
2.1.2 使用pip安装第三方库12
4 l. [( i7 x- I$ d/ V. e' O, `" d2.1.3 使用编辑器Jupyter 编程13
' q& X6 c, x* {0 `4 C2.1.4 使用编辑器Pycharm编程15
/ ] n x% V2 G2.2 Python 使用入门18
* G' h( W# |0 s8 n" N( w2.2.1 基本命令186 g5 O) W+ g: ]/ j0 {8 P( Z1 s, H
2.2.2 数据类型196 V1 e# c7 W. a' A0 ]
2.2.3 条件语句和循环语句21
' K3 p% q/ f& i& ~0 ]8 m2.2.4 函数234 ^4 A! O; X9 e% b7 S( T2 L$ B
2.2.5 面向对象编程24
% x) v' \! Q, g0 q% V0 L2.2.6 错误处理28+ |$ w/ o1 Q9 @( c7 f5 g7 L" e
2.3 编写第一个简单的爬虫29, ~6 {! |+ ~7 g' F5 p
2.3.1 第一步:获取页面29
1 x4 O0 i; P+ g& F" A) `7 w( I' E) p6 I" }2.3.2 第二步:提取需要的数据30
0 k. b+ p) Z" O2.3.3 第三步:存储数据328 z$ O1 i! J h: X+ Z3 f
2.4 Python实践:基础巩固33
' I; }% z2 i) Q; s6 j2.4.1 Python基础试题34
0 ^6 c" M7 b7 y4 i2.4.2 参考答案35- y: B5 z, _% _$ V7 a! m
2.4.3 自我实践题382 A% j) \6 n# N- x; F
第3章 静态网页抓取396 l3 H6 f6 }4 p
3.1 安装Requests40( u* W/ n8 u M" K
3.2 获取响应内容40
9 ?4 I1 f4 y) @1 `4 h3.3 定制Requests41) ]3 W [7 |7 I' ~ W( X
3.3.1 传递URL参数41
" x* Z( V( v, J3.3.2 定制请求头42
) _4 W6 `) I$ [ _" K3.3.3 发送POST请求43
' P5 T1 G/ O/ }8 y( N( `$ Y3.3.4 超时44* R$ u$ E5 R- b$ E( t0 }1 D
3.4 Requests爬虫实践:TOP250电影数据44' i) i$ M$ a" |2 W
3.4.1 网站分析45
. D+ ~5 w2 s) v6 R' o1 \3.4.2 项目实践45
" u" L$ Z" U2 P( D l. I5 @# P; W3.4.3 自我实践题47
h) X8 I7 x* C* o9 x; [第4章 动态网页抓取48
. ?& X! `* l) c2 i" i# m/ q8 k4.1 动态抓取的实例49
7 W4 `! q! s$ `* g- L9 g4.2 解析真实地址抓取507 Y' {9 C! J4 |1 D6 D
4.3 通过Selenium模拟浏览器抓取55
4 a9 e/ l) G8 ]$ {3 S+ z2 a6 w: d& W4.3.1 Selenium的安装与基本介绍556 J% o' \8 ^5 w7 F* R& a! V
4.3.2 Selenium的实践案例57* R8 A' n7 l! W8 }1 ]
4.3.3 Selenium获取文章的所有评论58
( S) G( P0 n: [4 ^& E4.3.4 Selenium的高级操作61, e$ H, Z6 ^7 G, b. c
4.4 Selenium爬虫实践:深圳短租数据64
5 `& C7 i& k% O6 s0 n( `; P4.4.1 网站分析64
7 M! B% m5 m7 N1 I2 {9 e6 o4.4.2 项目实践66
9 U/ f" V6 W, {8 I" q4.4.3 自我实践题69
" g+ H( N4 p0 V3 w" i6 Z# Y第5章 解析网页70
0 F( R" I1 ]* G$ A8 k& B+ p5.1 使用正则表达式解析网页71
: s/ m2 b9 [2 P, u- F/ D5.1.1 re.match方法717 m+ L- @" H% h, y
5.1.2 re.search方法74
5 u; U! c6 w7 s4 b6 E! t5.1.3 re.findall方法74
6 Y4 `! O" i. y4 D4 g$ h5.2 使用BeautifulSoup解析网页76
8 N) F7 j+ E# p0 k$ l7 c5.2.1 BeautifulSoup的安装76
Y, ^1 D9 _5 w( B) L5.2.2 使用BeautifulSoup获取博客标题771 }" T/ ? S0 x
5.2.3 BeautifulSoup的其他功能78
# Z9 `) l1 n: b1 B$ |5.3 使用lxml解析网页82
' V* W) ^! M. Z- A8 @0 X, u5.3.1 lxml的安装82
: o3 G% F( n3 C" V/ W7 d6 [( G5.3.2 使用lxml获取博客标题82. R" W7 c! f& r1 }' f/ L
5.3.3 XPath的选取方法842 x M, e1 Z t. k& ^
5.4 总结85
0 A* }/ n/ D, d* W8 ]5.5 BeautifulSoup爬虫实践:房屋价格数据860 n5 {: C( ]: C. o7 j$ s
5.5.1 网站分析86& S# k1 H* `0 Y& f
5.5.2 项目实践87
. M) N0 v% e2 F' W, e8 \% ]% Q; d- C5.5.3 自我实践题89
5 a( S# u4 |& k9 F+ K* ?" y! h第6章 数据存储90
" h, v0 A6 i5 x$ v. ]( x6.1 基本存储:存储至TXT或CSV91
; z& c8 F; l, R' H+ _/ D/ ~6.1.1 把数据存储至TXT91* ?4 {/ M' ?) }5 u
6.1.2 把数据存储至CSV93- m: B5 L! Q# r% Z
6.2 存储至MySQL数据库94
. }4 _+ R8 E+ [& @$ a5 p" G6.2.1 下载安装MySQL95
6 Q6 d" L; @! S# |0 C6.2.2 MySQL的基本操作99. c. `+ J( V2 t5 e- y. h7 b. `, K
6.2.3 Python操作MySQL数据库104
# @: w; d% s& ?/ C6.3 存储至MongoDB数据库106* Q; O8 [7 l. u4 `
6.3.1 下载安装MongoDB107; C: B: J) |& y+ `
6.3.2 MongoDB的基本概念110. X! G) W- h9 K* g
6.3.3 Python操作MongoDB数据库112
! g- l# @: R- T6.3.4 RoboMongo的安装与使用113
( X! A: s5 m4 G$ \+ o8 k6.4 总结115# S( L# I6 R) [! t
6.5 MongoDB爬虫实践:虎扑论坛116' G! C% w# N" R+ w" T& ]) |
6.5.1 网站分析116" J9 V3 ~8 Z, B; O6 \' H d- ?
6.5.2 项目实践117
% N0 T) [9 c1 V* J+ m& o$ ~6.5.3 自我实践题123
l- r- {" M+ w. a' v8 P$ {第7章 Scrapy框架124
& T0 A% _( v! o; `( N; }. E' d7.1 Scrapy是什么125
( Q* f1 H( s9 ~( b7.1.1 Scrapy架构125
3 Y) `1 S- i& N2 i7.1.2 Scrapy数据流(Data Flow)126
6 e' D4 w0 }) ?( S/ }- g3 A) a7.1.3 选择Scrapy还是Requests+bs41273 a! Y7 a) u3 N2 y3 w. E
7.2 安装Scrapy128& d' X7 k' ?/ O9 Z
7.3 通过Scrapy抓取博客128. ]5 X3 P6 M F) g; |
7.3.1 创建一个Scrapy项目128/ c b& H# C, d/ c- M- Y) v
7.3.2 获取博客网页并保存1298 k, g4 J5 P: r$ m2 s2 u, s2 [
7.3.3 提取博客标题和链接数据131) x) C. ~# f# r5 W& ?8 v
7.3.4 存储博客标题和链接数据1335 L* r4 m1 J. c
7.3.5 获取文章内容134, [9 `5 o6 b2 a P
7.3.6 Scrapy的设置文件136
1 `$ v2 X% E2 x2 `5 a v5 k7.4 Scrapy爬虫实践:财经新闻数据137% B5 V% F# m4 E j
7.4.1 网站分析137
( D O. T9 F1 }+ e% i- |7.4.2 项目实践138
1 a( W( t. p+ e5 t7 b, e. |$ Z7.4.3 自我实践题141
- q5 D% W" G5 p6 F) i9 i) T3 T% Q第8章 提升爬虫的速度1420 b5 Y! j& Y" V' U$ D i
8.1 并发和并行,同步和异步1439 s2 ?% p2 P1 w4 x
8.1.1 并发和并行1439 {6 ^6 C& G2 X+ c) a
8.1.2 同步和异步143
5 V& p) o$ v) m, w8.2 多线程爬虫144, j9 ]5 w# p2 o1 `
8.2.1 简单的单线程爬虫1456 @/ ]8 N+ V6 j& I% O
8.2.2 学习Python多线程145' Q2 w- V6 D, Q
8.2.3 简单的多线程爬虫148% {6 H9 o0 {7 m
8.2.4 使用Queue的多线程爬虫150
' t4 z I5 C0 M0 y8.3 多进程爬虫153
2 v3 C0 j! R+ y% C2 W3 r8.3.1 使用multiprocessing的多进程爬虫1530 P4 k! v, W) j
8.3.2 使用Pool + Queue的多进程爬虫155
/ K* m. S' m! v* B# o8.4 多协程爬虫158
9 c/ W# S1 `/ {# e7 S% r8.5 总结160
. `+ B1 I$ H9 }1 g第9章 反爬虫问题163$ e( e8 ? v2 b8 G$ H/ G
9.1 为什么会被反爬虫164* i! J+ V6 |2 h7 k) s
9.2 反爬虫的方式有哪些164
1 Z# R4 T1 H8 i- B# x m# u6 x9.2.1 不返回网页165& x; M1 L, {0 D0 ~5 p
9.2.2 返回非目标网页1656 p, c$ s, S! k: y4 }$ |
9.2.3 获取数据变难166 w a# f4 H2 w& s: c9 {: n J, D
9.3 如何“反反爬虫”167: {5 Q; q7 Z+ C( @1 G
9.3.1 修改请求头167
' l* H. z2 v- c6 c! ]: _8 N* }9.3.2 修改爬虫的间隔时间168
' G8 o: p# b& ~7 J$ h) h$ ]9.3.3 使用代理171' y& [( z: `5 H- s
9.3.4 更换IP地址172, E+ d+ @$ I( d: u; \
9.3.5 登录获取数据172
7 n" P1 \$ l$ @8 S+ L4 } N4 Z9.4 总结1728 H+ ]" Q/ v- J) _- ^4 q
第10章 解决中文乱码173
& o$ F6 p, Y* [8 \3 m0 j10.1 什么是字符编码174# t- G0 I8 _4 t$ F! L0 e
10.2 Python的字符编码176
$ E- n% u0 x* i) t- W8 v/ K( Z10.3 解决中文编码问题179
; _' k4 q% X2 _8 E4 A10.3.1 问题1:获取网站的中文显示乱码179! n" L! z% _( L% c
10.3.2 问题2:非法字符抛出异常180' ? ?, K! K$ C# f" h/ {2 _" U
10.3.3 问题3:网页使用gzip压缩181* a5 I" Q0 M8 Z( n
10.3.4 问题4:读写文件的中文乱码182; F, `7 M$ j5 c' o
10.4 总结184
& R( N* c, e' h u" h5 D0 S9 ]第11章 登录与验证码处理1851 |: @+ X9 i5 M9 `- P2 [
11.1 处理登录表单186
! p1 d1 M" V: R; G11.1.1 处理登录表单186
9 W$ E0 P: x, f11.1.2 处理cookies,让网页记住你的登录1907 q3 n1 ^0 e) s" q) l4 J
11.1.3 完整的登录代码193
1 X& a( Y; y/ g/ @- @11.2 验证码的处理194
2 {4 ?* O' I; S# b11.2.1 如何使用验证码验证195
: c" Z- F" H% f/ z3 C$ w3 O/ Q11.2.2 人工方法处理验证码197
- U& K( v' v$ a5 ~4 D& \ r11.2.3 OCR处理验证码200
i9 T8 N% x: C9 o. k- r! ]11.3 总结203" n# b# e+ X) H# F; U
第12章 服务器采集2046 _8 H! o. p6 K, d; V
( F# ^! v0 I Q0 L5 r
此书已加入到VIP会员卡,只要购买VIP会员卡即可免费阅读上百本电子书,这张VIP卡除了免费让你读书,还有更多的权益等你来领,往下↓拉
0 E0 X9 p1 x+ i/ r0 _* N3 I# i0 |# W: V) {, m* M; a. m
9 ?. t0 m) I7 j' e X
阅读电子书的方法如下:7 v" K$ W$ H3 @- ^5 G8 d
; O; M: h+ |4 s( }
打开CSDN APP(软件商城搜索“CSDN”即可找到哦)—>登录CSDN账号—>学习—>电子书; d4 d+ B g. U
' }# k0 L- w# L6 w" c
. p/ ?4 f" ?7 J2 W/ F) \- h+ u) Z2 R————————————————4 q: F" l: I9 G, C2 R1 I7 W
版权声明:本文为CSDN博主「好书精选」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
4 a# `% S+ E3 m' s) j9 K# @9 B0 [原文链接:https://blog.csdn.net/weixin_37649168/article/details/104265388
5 V+ Y- t- y* H% \# m$ L
$ \4 x9 C; ^2 H/ k# d+ t) p7 V
4 ]- A- ?. G% l( b; G" \. H8 t' G7 b |
zan
|