- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 563405 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 174244
- 相册
- 1
- 日志
- 0
- 记录
- 0
- 帖子
- 5313
- 主题
- 5273
- 精华
- 3
- 分享
- 0
- 好友
- 163
TA的每日心情 | 开心 2021-8-11 17:59 |
|---|
签到天数: 17 天 [LV.4]偶尔看看III 网络挑战赛参赛者 网络挑战赛参赛者 - 自我介绍
- 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
 群组: 2018美赛大象算法课程 群组: 2018美赛护航培训课程 群组: 2019年 数学中国站长建 群组: 2019年数据分析师课程 群组: 2018年大象老师国赛优 |
教你如何编写第一个简单的爬虫
- y& I0 v1 j% A( }8 o很多人知道爬虫,也很想利用爬虫去爬取自己想要的数据,那么爬虫到底怎么用呢?今天就教大家编写一个简单的爬虫。
+ w! l" Z( G7 S+ E v6 q8 k1 g0 d# S, R) k' Q5 s
下面以爬取笔者的个人博客网站为例获取第一篇文章的标题名称,教大家学会一个简单的爬虫。
, J* [; a; M; G1 @0 ~+ r
# C: T" [% r1 {5 g第一步:获取页面
5 a9 K* ^: b5 k. e: D+ ^$ ]# l1 R! f! k0 H+ A' W
#!/usr/bin/python
* w" [, A# T0 j# coding: utf-8
1 `( [! S& Z* ?5 H
2 Q; J( B' a2 U. zimport requests #引入包requests
* a5 x6 i' m1 U5 |; Clink = "http://www.santostang.com/" #定义link为目标网页地址
$ L/ }) V. e5 g# 定义请求头的浏览器代理,伪装成浏览器
r) D; u: Y2 f( Kheaders = {'User-Agent' : 'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6'}
! _ p& V, ]) W4 N2 g" r
9 U) W9 v9 H2 }3 G) V, Q/ K$ X0 vr = requests.get(link, headers= headers) #请求网页2 h" p3 p% m/ _" k
print (r.text) #r.text是获取的网页内容代码% P9 A- P: Y# R/ S7 I9 {* X
1! H# ]* T$ ~1 m: _9 x" C) j
2
6 s3 c% F R; w3) _' c% |4 ]5 M: u! W2 d2 A# j0 j7 d
4
. Y1 g! D: s9 e/ J5
+ T z% H0 U1 w- [3 t: M6 t, Q6* ~' t/ E9 a+ _) T' R
7. D% ^) z$ ~' r( a
8
# T4 C! W9 [" @, h; f* V+ C92 C$ X, i2 {+ d: W: h% t0 ]# ~
10
, i1 f! L7 @3 n$ V: c上述代码就能获取博客首页的HTML代码,HTML是用来描述网页的一种语言,也就是说网页呈现的内容背后都是HTML代码。如果你对HTML不熟悉的话,可以先去w3school(http://www.w3school.com.cn/html/index.asp)学习一下,大概花上几个小时就可以了解HTML。7 r% L# m0 B6 c7 M
! p- V6 B i) | I在上述代码中,首先import requests引入包requests,之后获取网页。
! ~" O/ i! B! Z3 x+ I! l, }- F2 j5 m
! N- @& Z1 v7 U" f(1)首先定义link为目标网页地址。
/ X) V5 p v" K1 \. Q2 A! q( d; u5 a9 |9 X y0 w1 y& @: B1 n$ r; C7 n/ V3 T
(2)之后用headers来定义请求头的浏览器代理,进行伪装! {! h, }) k& G. O+ [+ s, z
, |' R# K* q1 p4 |7 m6 o. h(3)r是requests的Response回复对象,我们从中可以获取想要的信息。r.text是获取的网页内容代码。$ i, `1 @' g. Q! @
+ l! I% o" b) ]9 a运行上述代码得到的结果如图所示。, x l- E4 \9 @1 V6 L
L& E' n6 B% Y% [7 d8 \( ~% d, U$ F' y. `
第二步:提取需要的数据3 B `( V5 C3 e' B w
, Z/ v5 y. t* X' w' c3 z3 I#!/usr/bin/python* n- a9 c S+ `9 w: ~) g1 A
# coding: utf-8
2 X: F: A3 E- S8 ^2 K. S# F" v$ D w( I( |
import requests+ p$ D4 s2 B$ x# P
from bs4 import BeautifulSoup #从bs4这个库中导入BeautifulSoup6 Y6 ?9 \) D5 @6 a1 k/ Z& L% H, k
1 [- B7 v6 T8 F `0 m2 {5 ilink = "http://www.santostang.com/"
: t- B$ @$ K, theaders = {'User-Agent' : 'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6'} 7 w* V, I3 X6 n4 Q2 C. q
r = requests.get(link, headers= headers); o% P5 D4 y% o
! ?6 P- ^7 x( ~# R( C, V- R
soup = BeautifulSoup(r.text, "html.parser") #使用BeautifulSoup解析2 S/ y; r& k# ?& i/ ]. r' C1 a3 Y
' ]( `/ ~/ x5 o* F#找到第一篇文章标题,定位到class是"post-title"的h1元素,提取a,提取a里面的字符串,strip()去除左右空格
1 D/ g+ c2 J1 ^7 U; _& k, utitle = soup.find("h1", class_="post-title").a.text.strip()
) ]" Z% F) c. Fprint (title)
1 p9 v. R2 M4 S* {9 O+ W8 ^: e4 ^1
4 B. L, Y" J v1 M2 I2# v, g& _; S* i1 E/ {
3' _7 x8 Z2 L8 E6 M# Y4 L8 i: L; L3 x
4' c3 @9 ~- z. q# j5 @3 J' `
5
8 L3 w8 P6 N5 J65 Y: y; ?; S% o
7# u5 J; _! f6 x6 S: _7 D
8
8 ], _# L; D1 V8 w9( D% d, W7 @; I
10( u7 m! D2 B; g# p' c/ i9 w
11+ `( F0 C; N: z
12
, `4 j+ V% k8 ^* L3 c13
/ k9 D7 }. R% R& p1 K6 y14
h6 Y! i7 a* J7 ]15
1 n+ F* ?* r+ R0 Z. L在获取整个页面的HTML代码后,我们需要从整个网页中提取第一篇文章的标题。
5 G/ X0 K% Y6 M! K
- P" r9 O+ I8 g7 A' F! j6 u. s这里用到BeautifulSoup这个库对页面进行解析,BeautifulSoup将会在第4章进行详细讲解。首先需要导入这个库,然后把HTML代码转化为soup对象,接下来用soup.find(“h1”,class_=“post-title”).a.text.strip()得到第一篇文章的标题,并且打印出来
; Z. ?- o6 W9 d: ]0 Q' b0 J8 O( I0 m$ s( l8 \" F
soup.find(“h1”,class_=“post-title”).a.text.strip()的意思是,找到第一篇文章标题,定位到class是"post-title"的h1元素,提取a元素,提取a元素里面的字符串,strip()去除左右空格。: ?/ h; d7 B/ T1 v# Y& H: B$ k
5 Q0 A' c" P; z1 d4 Z( G! e+ L- `# u$ h
对初学者来说,使用BeautifulSoup从网页中提取需要的数据更加简单易用。. a0 j/ t/ m7 S
& l& v3 y0 j7 D" b. l$ _0 R那么,我们怎么从那么长的代码中准确找到标题的位置呢?
) e% ^- V- h$ N2 ]+ g$ j; v( M* O4 F/ z4 L: g% f- M
这里就要隆重介绍Chrome浏览器的“检查(审查元素)”功能了。下面介绍找到需要元素的步骤。: a: i: f* }, B; `
4 u: e. R3 H" r( D; G
步骤01 使用Chrome浏览器打开博客首页www.santostang.com。右击网页页面,在弹出的快捷菜单中单击“检查”命令,如图2-17所示。) @: R0 Z4 y. h
& N/ i0 F9 i" _# \
# X7 i' m9 A: K" |
$ l! t1 G/ {1 u步骤02 出现如图2-18所示的审查元素页面。单击左上角的鼠标键按钮,然后在页面上单击想要的数据,下面的Elements会出现相应的code所在的地方,就定位到想要的元素了。
n* N* e1 `% v# Z# M2 q0 V0 L" [3 ]6 T* f
9 ]9 Y6 _; F/ W* y( m" M
; m& `( j: N6 Z- g' X& `图2-18 审查元素页面
; Q3 a& c; M. i% s0 N步骤03 在代码中找到标蓝色的地方,为1 Z1 ~$ ^1 W4 h9 f0 ^
# N% E* ~4 |# F4 n
echarts学习笔记(2)–同一页面多图表。我们可以用soup.find("h1",class_="post-title").a.text.strip()提取该博文的标题。) @, Q* p$ K; i' _" V, w4 z
5 p3 y- y5 _8 s7 O- E1 r4 e' M9 }4 U
第三步:存储数据
) b! z/ ]- N0 ^; s9 M$ y( m j0 u# O3 V( Y6 p, p6 |
import requests
' f: c+ U0 v! Q6 b }7 `9 rfrom bs4 import BeautifulSoup #从bs4这个库中导入BeautifulSoup5 ~. F) W5 P8 W0 l9 r( s* K* D6 q
: c. O( B$ l; Z' \* {3 Olink = "http://www.santostang.com/", a" |- b6 C! U' N$ b
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 J1 B6 K2 d1 t" I+ gr = requests.get(link, headers= headers)
# X( |. a7 T2 } M8 o2 @ P/ I$ r
4 ~7 u( B0 i6 h1 u% zsoup = BeautifulSoup(r.text, "html.parser") #使用BeautifulSoup解析
# k" o$ N; r& |9 otitle = soup.find("h1", class_="post-title").a.text.strip(), X3 `( S+ {8 l- _3 b' r
print (title)
! Q1 t( H5 y% C& ]+ J9 b8 m6 T# y f
: ~) R" i# p, Z# 打开一个空白的txt,然后使用f.write写入刚刚的字符串title0 T2 L; K @5 l. {% S- I& C
with open('title_test.txt', "a+") as f:. N# I' _! U' S8 b; r
f.write(title)$ K! |: K+ {. K8 y2 }0 |$ k2 w
17 ^, O( E- n9 k! X \$ ~' x [3 T
2
1 @3 {$ u+ X* u! N4 F% ^' k3* d; t4 ^! ?+ b" s
4
m- T* s6 u, c$ ^* A$ u; N$ z! a5% Q6 K9 f+ N4 h7 \! e4 o; j6 e0 e7 b
6
" ^3 y2 M3 K+ W# C# H9 ~9 q& Z: T5 y7# C5 V, B) u" z. L5 T6 T$ \; }
83 P7 q; t. @. b
9
6 D) }. R$ R& L! [$ V. B10* E0 T2 L0 a' x5 S
11
# D4 R! L# n7 M y+ D& L127 B0 K4 N! R: S. j/ K
13
' ]& {9 T+ J4 b149 `7 q) n" @) n* P- B( O$ Z
存储到本地的txt文件非常简单,在第二步的基础上加上2行代码就可以把这个字符串保存在text中,并存储到本地。txt文件地址应该和你的Python文件放在同一个文件夹。
% v& b8 s: A( z, _. g$ ]) P/ ^) ]5 S: Q7 M0 [
返回文件夹,打开title.txt文件,其中的内容如图2-19所示。
5 Z3 {1 B6 ^) k: V9 d0 @$ {
8 A2 o* {1 v; P N" k以上内容就是本节要介绍的如何编写一个简单的爬虫的步骤,想要学更多爬虫相关的内容,可以到这本书里查哦《Python网络爬虫从入门到实践(第2版)》
# ?5 X. k' }/ r4 _( d5 A: u( t" Y# W: y. X5 ^' n6 i& ]
- y* ^& g% m! ]
目录
) Q& C/ D8 r7 o5 b( m/ Z4 n3 E8 [) J
前言6 r( Q' Z! M. j3 @" }# q
第1章 网络爬虫入门1
* }" M6 ]4 U. ^% _2 Q1.1 为什么要学网络爬虫2
6 a7 \7 N( x0 d" L# v1.1.1 网络爬虫能带来什么好处2" [3 O0 S- a( s3 A
1.1.2 能从网络上爬取什么数据3
- e' r% ?9 E3 t3 I1.1.3 应不应该学爬虫3
2 A! N4 ^* |8 M0 i3 G( k4 i1.2 网络爬虫是否合法3
# n4 |' ^4 i+ O" B' `' R1.2.1 Robots协议4 [, n/ w* C8 e$ V2 t/ G( [8 ^( f0 v
1.2.2 网络爬虫的约束53 [9 O. }; ?3 K/ f+ A1 F
1.3 网络爬虫的基本议题67 t( z1 L( I7 R
1.3.1 Python爬虫的流程7
' s+ h2 E @$ h; Y4 a1.3.2 三个流程的技术实现7
) {" Y5 O( N* l( a5 ^4 P5 e第2章 编写第一个网络爬虫96 ~ V0 Q+ Y% M! q$ N
2.1 搭建Python平台10' [4 K! }% S) A# j( s' ?
2.1.1 Python的安装10
5 ^7 X8 ^& y6 g) k& h2.1.2 使用pip安装第三方库12
0 o$ M* C* y( i% r: ^2.1.3 使用编辑器Jupyter 编程13, z3 \- M" ?1 @$ b
2.1.4 使用编辑器Pycharm编程15; ]1 X* Q* _* M; c$ K
2.2 Python 使用入门18
6 { B9 ^/ [1 f2.2.1 基本命令18
; [/ j8 W8 M1 ^/ \+ v" f/ J2.2.2 数据类型193 ^/ t% g; z+ J# ]7 {, |; R7 k
2.2.3 条件语句和循环语句21% U! q8 x# F* S2 F; Q
2.2.4 函数237 [! h: ]3 P# U+ A
2.2.5 面向对象编程24
T9 O0 N; x. j+ h2.2.6 错误处理28
( _ y+ b# t) N2.3 编写第一个简单的爬虫299 d6 r7 M, G/ R1 H! ]' `6 s
2.3.1 第一步:获取页面29( ~9 [- X8 R9 \6 H, y& F g$ {4 [
2.3.2 第二步:提取需要的数据309 K& _) C B& Y y
2.3.3 第三步:存储数据32
' a! _2 [0 Q4 `/ H2.4 Python实践:基础巩固33, K. k% ^9 d' ]8 Q! Z
2.4.1 Python基础试题34& F7 D3 g G+ I
2.4.2 参考答案35
# N! z) _( i; `5 Y7 o. {2.4.3 自我实践题38
7 ?7 g0 x+ W0 @第3章 静态网页抓取398 `* T/ x# m% e5 b
3.1 安装Requests404 ]9 P+ `5 q2 {, |' l5 c- U3 I
3.2 获取响应内容40
8 i- F/ E5 o! Q. V3.3 定制Requests41
5 g/ p4 ]8 w/ c3.3.1 传递URL参数41
7 }! l- j0 r6 H8 _ O7 @) [( k3.3.2 定制请求头42: h+ T! ^: b [
3.3.3 发送POST请求43
5 e$ v/ | }& a3.3.4 超时44
' F+ X! Z0 p2 |8 l/ d3.4 Requests爬虫实践:TOP250电影数据44
2 E! x% A% k. \3 L+ L. Y3.4.1 网站分析455 J& x& u: N' Q# T; q# ]
3.4.2 项目实践45! e1 H/ C# d; \" c5 z" T+ [
3.4.3 自我实践题47
6 }" A. m6 R( r, s第4章 动态网页抓取48
4 T$ d6 m% T" e8 D; G4.1 动态抓取的实例49
8 u; L& T# |" t* T4.2 解析真实地址抓取50
5 c) a1 |) u* w/ F+ G1 l4.3 通过Selenium模拟浏览器抓取55
* n i2 X, i$ Z, ?' n4 N& Y' N4.3.1 Selenium的安装与基本介绍55: d1 Q; }& @# _# N0 ^0 i# [
4.3.2 Selenium的实践案例57
+ q. i" \( d1 h: D ]4 i4 @4.3.3 Selenium获取文章的所有评论58
( k2 N4 ?7 a9 ]4.3.4 Selenium的高级操作619 S$ `$ d1 o, Y/ v! X' t$ f: g
4.4 Selenium爬虫实践:深圳短租数据64" }3 {8 {& Z: L6 c
4.4.1 网站分析64
( ^3 M% y5 A1 B- r w7 u- p# n4.4.2 项目实践666 D# K2 ~# Y+ z' z5 S
4.4.3 自我实践题699 k# ~0 m" C5 D# V1 X- _7 E1 s
第5章 解析网页70. _7 [" b7 e! E. X* r
5.1 使用正则表达式解析网页71 l$ K1 U7 N. J, z# l; h, A; i
5.1.1 re.match方法71
& A/ |, y2 ? g. }' t6 ~4 k5.1.2 re.search方法74/ L. P+ C+ O" [0 o% `/ g
5.1.3 re.findall方法74; Z7 c0 x4 R L& ]
5.2 使用BeautifulSoup解析网页76
7 v: R/ F1 e; o5.2.1 BeautifulSoup的安装76# W/ N' F: M0 w" v( c4 m9 B# x
5.2.2 使用BeautifulSoup获取博客标题778 Z! f) q, b& m
5.2.3 BeautifulSoup的其他功能78
; X/ \2 P; i1 B: |' e8 ~) ^5.3 使用lxml解析网页821 Q- Q/ c6 C: M8 U" G" m
5.3.1 lxml的安装82
; g. z2 c$ a# C5.3.2 使用lxml获取博客标题82* d* Z: w$ s4 y& W( s$ e! @- |
5.3.3 XPath的选取方法84. }! ]; G3 S" _2 L. b
5.4 总结85
: [& P& |. K$ s5.5 BeautifulSoup爬虫实践:房屋价格数据86) B. ?- @* ]- c: c5 M7 N! q3 D
5.5.1 网站分析86) |% ]7 a6 K* {
5.5.2 项目实践87
" _0 ?& D/ q& j5.5.3 自我实践题89
/ I+ R# ?7 B% U$ S5 m0 i2 ]: c第6章 数据存储908 [$ f2 z3 w, T: y* i
6.1 基本存储:存储至TXT或CSV91# M G' Y& T6 R, q% c. Y
6.1.1 把数据存储至TXT91- F- L* ]. R8 V8 I/ H+ x6 N# H3 x; y
6.1.2 把数据存储至CSV93
, x& h* c& K* T" [: m) Z, ]' c x6.2 存储至MySQL数据库94! L( y+ o5 `& J; B
6.2.1 下载安装MySQL95' n8 L$ n2 d$ b3 k5 V
6.2.2 MySQL的基本操作99
* Z; a' Q4 i0 o+ L8 r: R7 K6.2.3 Python操作MySQL数据库1045 w# m8 v! j1 j; a2 s
6.3 存储至MongoDB数据库106 d% b& e: a* S( q5 x8 y
6.3.1 下载安装MongoDB1070 H3 O. D- B5 k, b0 f% H1 j
6.3.2 MongoDB的基本概念110" A4 K; F$ l- @9 E! f4 ^
6.3.3 Python操作MongoDB数据库112
! \, z! X' C' p) O/ X3 O6.3.4 RoboMongo的安装与使用113
7 c ~6 y2 g0 z: M( E6.4 总结1151 N5 L' A5 b- L, q! ~% ?
6.5 MongoDB爬虫实践:虎扑论坛116, o7 y2 F2 R" g6 G# W+ z
6.5.1 网站分析1163 S' ]8 J6 E& }7 L4 @
6.5.2 项目实践117
2 g) f; M: S- u. D" C4 r6.5.3 自我实践题123* V/ \. T7 D5 D; @
第7章 Scrapy框架1241 q! N( U9 O3 f# K- P6 O( o5 C
7.1 Scrapy是什么125
) n# z% t) y3 \, b7.1.1 Scrapy架构125
( x* ^$ e$ O+ o# ~) l" v( _# G7.1.2 Scrapy数据流(Data Flow)126
, t0 o( d! Q6 Z+ ?. ~( d7.1.3 选择Scrapy还是Requests+bs41278 F. {1 H+ [, m/ G; ^, l! D
7.2 安装Scrapy128
' C1 f6 T8 Y2 ?+ m9 s& Y5 P7 {7.3 通过Scrapy抓取博客128& t5 M7 U, e Z
7.3.1 创建一个Scrapy项目128
" j# j9 m9 ?0 v# a0 ?7.3.2 获取博客网页并保存129
9 H% A& x4 Z& p7.3.3 提取博客标题和链接数据131
2 V4 p: L& n* E. c7 e7.3.4 存储博客标题和链接数据133$ f" X; P- A7 l, B% |; D' s
7.3.5 获取文章内容134
7 U0 x# {8 H- t* v3 x& }4 a7.3.6 Scrapy的设置文件136
" i T, c* p: k0 @; I7.4 Scrapy爬虫实践:财经新闻数据137
7 H) I8 n/ ?8 h8 c$ w4 a+ ?7.4.1 网站分析1376 ^4 O: H- e7 `, i7 {8 W1 U
7.4.2 项目实践1385 `3 g& G! Z% x! B8 ]6 u# O9 o$ l
7.4.3 自我实践题141
: `4 p$ ^/ H$ c- l6 T# t) c: Z第8章 提升爬虫的速度1426 ]% y# a+ n. \# H7 J; m
8.1 并发和并行,同步和异步143% N; W0 C# E( ?4 | u. g. k
8.1.1 并发和并行143
/ ~- B2 D3 M" h* [! j8.1.2 同步和异步143
4 ^1 I0 l, O# s% j8.2 多线程爬虫1444 {) E) g( t$ ^2 g7 c6 k$ K
8.2.1 简单的单线程爬虫145 X# D8 C0 g6 \
8.2.2 学习Python多线程145" b0 D* W* z+ o. Z4 A2 Y
8.2.3 简单的多线程爬虫148) b# u5 g) N5 P7 t: v/ q
8.2.4 使用Queue的多线程爬虫150" R) I( e5 K3 n0 j- {
8.3 多进程爬虫153- {7 p/ r1 }- k4 b6 R. C
8.3.1 使用multiprocessing的多进程爬虫153- J+ r; z2 r( l/ K/ B1 q7 v- r
8.3.2 使用Pool + Queue的多进程爬虫155
& T; o' O( S& ?. A8.4 多协程爬虫158
9 Z7 i( m+ R/ v; R# q# W8.5 总结160
3 z4 N. R: Y, B第9章 反爬虫问题163
) a8 }' `4 n4 |! ^9.1 为什么会被反爬虫164' q4 F1 B- S1 g. ]4 ~ o
9.2 反爬虫的方式有哪些164
# X- [( a/ { K7 q: r+ M9.2.1 不返回网页165
& G7 _3 m! t& l/ h% R' e, r# v9.2.2 返回非目标网页165. c: j' G" h' z) c
9.2.3 获取数据变难166& w1 x4 Z: c$ ~# D, g
9.3 如何“反反爬虫”167& u! n# W( M) T$ k) g v
9.3.1 修改请求头1670 ?6 I8 f$ M8 _& K
9.3.2 修改爬虫的间隔时间168- f1 c: i; v0 z1 K8 |
9.3.3 使用代理171) q. @% i4 D: K* I5 R: W
9.3.4 更换IP地址172
. Q# y3 H. Q6 B4 c9.3.5 登录获取数据172( q3 I6 e8 V: t; D7 ~
9.4 总结172
! y' ^1 f) _! T% I: Y, S第10章 解决中文乱码173
6 J4 c2 P5 |! M- g4 ~10.1 什么是字符编码174. {7 J' g1 X" Y1 a+ ]8 Y% C
10.2 Python的字符编码176
% j. \ w8 O7 p/ E: [% p10.3 解决中文编码问题179
0 _3 s5 |5 M# G) Z8 F10.3.1 问题1:获取网站的中文显示乱码1790 f% X2 m+ @: b. A# l% Z8 D
10.3.2 问题2:非法字符抛出异常180 C+ D# c+ D0 j, G
10.3.3 问题3:网页使用gzip压缩1812 A& s; ]9 }; @. @3 k* F- M+ |
10.3.4 问题4:读写文件的中文乱码182
0 g4 n; I/ G. N, G# j10.4 总结184
; Y( n! ?* S$ G: j) j4 l; d4 H. H2 A第11章 登录与验证码处理185! S* N( C+ {) b. ^$ V
11.1 处理登录表单186
8 H8 d+ h' P: K/ k5 W8 K2 \11.1.1 处理登录表单186
! `( s6 E* ?- \4 `4 S11.1.2 处理cookies,让网页记住你的登录190
# O8 E0 o" b0 q( ]11.1.3 完整的登录代码193
1 p9 Q* r# H* s" {11.2 验证码的处理194
: W; l$ z" q! `' p" b11.2.1 如何使用验证码验证195
% i: s8 x1 D f# B8 Q8 ?$ Z) l1 _11.2.2 人工方法处理验证码197
/ b6 K1 t$ A$ q% M7 t: C5 @9 D11.2.3 OCR处理验证码200
7 p" H" l$ B9 e# K& w11.3 总结203' \! f. b6 e e8 l2 J
第12章 服务器采集204
" |; x: {9 `9 a( k1 u# `
p. d% I+ @7 U5 Y此书已加入到VIP会员卡,只要购买VIP会员卡即可免费阅读上百本电子书,这张VIP卡除了免费让你读书,还有更多的权益等你来领,往下↓拉( w) q! ?: a! t% Q
( E) I! E+ p8 E2 f6 c8 r
0 J/ g! j+ ]) S! d' [% p阅读电子书的方法如下:" H8 d0 E9 f) I0 W* O1 c8 o* @- }
/ S# b1 t1 B& @" d7 B1 R
打开CSDN APP(软件商城搜索“CSDN”即可找到哦)—>登录CSDN账号—>学习—>电子书2 W3 w: U+ g$ |( d5 ^' l& b
1 e# }3 o, }3 W1 d1 V) `1 P
$ n# U& a* S. C) |3 M( Q$ o————————————————
. ?# C$ x# e- \! E5 W$ t版权声明:本文为CSDN博主「好书精选」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
" F; ~6 S: E% L) f3 f+ V9 d. @原文链接:https://blog.csdn.net/weixin_37649168/article/details/1042653887 V* I6 v; w0 ^. |1 ]
! S" N V& w( P" K, N3 \, a" M! V0 w% p1 Q" t. H, q) @, c3 s8 ?
|
zan
|