- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 564647 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 174617
- 相册
- 1
- 日志
- 0
- 记录
- 0
- 帖子
- 5313
- 主题
- 5273
- 精华
- 3
- 分享
- 0
- 好友
- 163
TA的每日心情 | 开心 2021-8-11 17:59 |
|---|
签到天数: 17 天 [LV.4]偶尔看看III 网络挑战赛参赛者 网络挑战赛参赛者 - 自我介绍
- 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
 群组: 2018美赛大象算法课程 群组: 2018美赛护航培训课程 群组: 2019年 数学中国站长建 群组: 2019年数据分析师课程 群组: 2018年大象老师国赛优 |
教你如何编写第一个简单的爬虫
5 F, l3 B( ~! p5 P9 s1 G$ u8 [8 I很多人知道爬虫,也很想利用爬虫去爬取自己想要的数据,那么爬虫到底怎么用呢?今天就教大家编写一个简单的爬虫。
+ m, V& ^* x, |. a3 t
# M; s! q) e* s* {* _1 K( M下面以爬取笔者的个人博客网站为例获取第一篇文章的标题名称,教大家学会一个简单的爬虫。
1 G) }9 x0 L Y' P
! a+ U6 v7 R0 C% q7 p/ }2 T, E第一步:获取页面' y8 D3 k, `% A; ?7 d+ [6 `, f
9 v, c; i6 V0 q8 V% ^$ F#!/usr/bin/python
6 u6 p4 W* b, W; u- ~. V# coding: utf-8
0 h: z K8 V4 t! U3 Q- |6 Q
* h. Y# y& E- c3 V mimport requests #引入包requests
" s" ?+ ^+ X5 J- W6 p8 Alink = "http://www.santostang.com/" #定义link为目标网页地址, W+ B+ o0 g0 W: n6 t9 C
# 定义请求头的浏览器代理,伪装成浏览器
, Z5 d, f- P) W) h& i" wheaders = {'User-Agent' : 'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6'}
8 h* n/ E R* q; u. _' p2 z2 B4 L
3 n( T# t+ K7 y) F2 Cr = requests.get(link, headers= headers) #请求网页5 ~ \" s9 R& y
print (r.text) #r.text是获取的网页内容代码5 S$ B! T' G3 X4 I
1
3 K3 E& s% t) n# U$ V! k2
5 y# R2 n% _; H- _" z* o& p37 S% F8 ?6 w1 b9 C8 N6 A" ~
4
' v* f: Q- {" u+ a7 G5: T/ o5 O1 w) Q; S# O, Y1 _
6
9 ?; E$ n8 G2 h7: z7 Y& c, B' K% c2 r' _, g
8
% G5 s9 M9 S5 Z- L$ }0 d* z9
2 Q6 |! H$ T/ ]% \103 G/ Z/ _8 m8 V& G; R# u9 _
上述代码就能获取博客首页的HTML代码,HTML是用来描述网页的一种语言,也就是说网页呈现的内容背后都是HTML代码。如果你对HTML不熟悉的话,可以先去w3school(http://www.w3school.com.cn/html/index.asp)学习一下,大概花上几个小时就可以了解HTML。
5 t- q# F' }( Y; V
' B/ ]5 V2 m4 e在上述代码中,首先import requests引入包requests,之后获取网页。9 `3 s) N% j4 G6 Q$ l
3 p7 Y3 Z) F- _3 Q1 W(1)首先定义link为目标网页地址。& {# H' V' H, [& R$ W
* D) b7 o' \+ ^. t
(2)之后用headers来定义请求头的浏览器代理,进行伪装 @6 G. A: A c% F* ?- O
; R: n' b/ O8 d( u0 ?3 b1 K(3)r是requests的Response回复对象,我们从中可以获取想要的信息。r.text是获取的网页内容代码。
% u6 y7 w2 } b! U# g* d+ ^) g' q- x6 q3 T0 I
运行上述代码得到的结果如图所示。) L4 x# A9 l' B. N# I. o
, X* t$ P: Z/ I! a$ d; F- r: o2 V3 d2 Z
第二步:提取需要的数据. W; z8 a* n* w4 S
2 E2 c$ d1 j6 B5 d% t9 j#!/usr/bin/python
; X! }; y: H2 ~6 m6 P. ?# coding: utf-86 u2 F* s% u7 [
, @: F/ x7 U' ^ z3 Kimport requests
( o9 t* d$ h I! H$ o& Bfrom bs4 import BeautifulSoup #从bs4这个库中导入BeautifulSoup) b, z, U% @( [$ H) D( R
$ F" h% F/ S1 Qlink = "http://www.santostang.com/"
& {4 G+ m6 c; u& aheaders = {'User-Agent' : 'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6'} 6 p1 o7 A2 M2 B+ u3 E+ e
r = requests.get(link, headers= headers)& H: @0 U! O" u5 F
% B' ]7 q( t! q6 Usoup = BeautifulSoup(r.text, "html.parser") #使用BeautifulSoup解析
1 {& L* P+ x" j9 V) l( h# @5 ]) ]* h# G) M% k2 a
#找到第一篇文章标题,定位到class是"post-title"的h1元素,提取a,提取a里面的字符串,strip()去除左右空格5 R* \, B6 {5 [" F( D; n$ I( c
title = soup.find("h1", class_="post-title").a.text.strip()( o# O# P2 k4 S/ j% i* k; {7 ?
print (title). ~$ q& I6 T6 D# v9 h* m) {, ]) H* h
1
' p" y+ F1 {: b. ?+ T2& h* N1 _4 c& k( i, _; V( C
3
' _& X; H6 D- x+ W4 C+ ]4+ |# D& K$ Y+ E# S3 _( P8 v4 o( u
5
0 R; b: u7 }* u7 Y& d7 b2 x% H6
% b3 k' ~) H( R! H: I, i7( S$ y- f8 j+ O& S
8: Z( H( B. n* Z6 P& I% p* K" F
9- l, C2 C+ r- G
10
/ c% A5 K# h6 t2 c11: H, D6 F. u* [, E
12& h9 v0 Z8 E: |1 ~2 d
13
. V3 [9 b2 |: b2 t148 T& z9 V) [! X1 ~
15: `$ l$ l9 u% k; N: T5 S# {
在获取整个页面的HTML代码后,我们需要从整个网页中提取第一篇文章的标题。0 i/ c" a+ C4 E, V0 r
; b# `2 r" K) m+ d这里用到BeautifulSoup这个库对页面进行解析,BeautifulSoup将会在第4章进行详细讲解。首先需要导入这个库,然后把HTML代码转化为soup对象,接下来用soup.find(“h1”,class_=“post-title”).a.text.strip()得到第一篇文章的标题,并且打印出来: k/ h, @5 I. @% [" M
! q }* V! Y% H# G; P/ ^( v0 S% \2 Vsoup.find(“h1”,class_=“post-title”).a.text.strip()的意思是,找到第一篇文章标题,定位到class是"post-title"的h1元素,提取a元素,提取a元素里面的字符串,strip()去除左右空格。 z2 N* F( d9 k$ p& s& M* D
) m9 U: k& S# E对初学者来说,使用BeautifulSoup从网页中提取需要的数据更加简单易用。4 N1 S& U7 e* ?( s `: d7 }/ W- \
' I/ u) ?& ?6 y% ?' Q那么,我们怎么从那么长的代码中准确找到标题的位置呢?
5 x7 g: ~6 D; N5 N" P! n( ~; y$ ?' o' p
这里就要隆重介绍Chrome浏览器的“检查(审查元素)”功能了。下面介绍找到需要元素的步骤。
! [ x O3 @( {( E8 y$ n! P. M9 _% l% b8 }
步骤01 使用Chrome浏览器打开博客首页www.santostang.com。右击网页页面,在弹出的快捷菜单中单击“检查”命令,如图2-17所示。
8 B% T' W& F5 _& @. R+ W: Y# m$ m0 _
7 p6 s0 v- e3 l3 h* m- ^: D: w8 r' l) k K; O! N
步骤02 出现如图2-18所示的审查元素页面。单击左上角的鼠标键按钮,然后在页面上单击想要的数据,下面的Elements会出现相应的code所在的地方,就定位到想要的元素了。
# F9 p i* l Q7 @2 o2 D3 M9 s- h+ h
8 @" j+ P V; {1 y" K8 A7 R
; M) h, X1 p$ W' y3 D) Q- e2 l" Z, _( {3 w
图2-18 审查元素页面
. B' c- F( ] b; h; {步骤03 在代码中找到标蓝色的地方,为- e0 e- D# z1 j% p/ d0 W N) A
2 z+ i0 @' A7 q& \* k5 xecharts学习笔记(2)–同一页面多图表。我们可以用soup.find("h1",class_="post-title").a.text.strip()提取该博文的标题。
" J, X' S* v& Z' P; o- w! U; r8 a0 y3 z' K) C/ B
第三步:存储数据% A( F7 q6 b" `3 o
) s6 |% t8 M! u) s3 S% zimport requests
1 w- e+ N" A% P& U& J/ @6 K: }3 xfrom bs4 import BeautifulSoup #从bs4这个库中导入BeautifulSoup
8 t* Y3 _1 v" o z2 U8 c4 H( U8 C% t+ p, p! j# `
link = "http://www.santostang.com/"1 Q! _ a6 y* w% S5 z) O5 V' }5 l
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'}
* k( o4 Y2 I D/ F- E5 o9 _r = requests.get(link, headers= headers)
6 U) _0 G! x% _+ y
7 `/ e% t. |" F, g# u- \soup = BeautifulSoup(r.text, "html.parser") #使用BeautifulSoup解析
3 o* a; |7 ^: H0 y" L9 rtitle = soup.find("h1", class_="post-title").a.text.strip()
% q& B7 f9 F2 \& t( m7 u- ]: i5 C7 Iprint (title)3 [# _. a; m8 S3 g
7 I# J# B9 R' T1 ^$ X
# 打开一个空白的txt,然后使用f.write写入刚刚的字符串title
' C6 R$ p6 B% K" b& {4 L. y/ Z1 m# Bwith open('title_test.txt', "a+") as f:
( z! B9 O9 m: |# e) x+ G! X$ L f.write(title)4 Q/ K, {0 p% G5 I3 g1 O0 f8 X4 @/ S
11 d: {' G! e; n' G
2
+ D' |/ O( k B2 ^; a( \0 F1 v" I+ V34 m0 d9 I5 |' B) R" k% V [1 t
4+ R3 R4 X0 t3 V8 H" J
5
( h) X$ T" x$ U- H$ f& a* y63 ` e) n- H" u, P
7
% |# I2 M; F& \0 x# k8 |- x8: @, H9 C* P1 Y: k0 m' a( c; U
9
* n: ~+ }# i: m! S- {10
; I; L2 ~& N2 G115 N9 s- ?7 [4 b% ]6 E$ O8 `# ?
12
2 s6 _% V. N1 ?' d% T7 K' w/ j13
! s! A( ]) }4 T7 v* Z* j143 } G6 u* T" a: g" e# e! Z
存储到本地的txt文件非常简单,在第二步的基础上加上2行代码就可以把这个字符串保存在text中,并存储到本地。txt文件地址应该和你的Python文件放在同一个文件夹。
$ c8 a+ p* i: o7 Q& Q. h( Q, B7 p
返回文件夹,打开title.txt文件,其中的内容如图2-19所示。
) w/ l. W5 a0 a* ^) N) |5 O6 M( J! F+ ~5 q$ ^
以上内容就是本节要介绍的如何编写一个简单的爬虫的步骤,想要学更多爬虫相关的内容,可以到这本书里查哦《Python网络爬虫从入门到实践(第2版)》: X- U1 d* O: x1 ^ G H. D
6 u- U% H# R3 D4 w( b. F9 h
/ `: X& I3 u( N; O* Q# E8 P) P
目录9 x0 Y( C* B( R* d2 L5 K0 h
( H$ s3 z3 ^/ C! l' i- L( D1 j前言
4 W, P% b8 u% X5 F( F第1章 网络爬虫入门1
( k, i: V! d; R4 _6 o$ n1.1 为什么要学网络爬虫2
: o/ n- b3 _# c7 d! `- K1.1.1 网络爬虫能带来什么好处2
% I; k, O+ Q3 I D6 v1.1.2 能从网络上爬取什么数据3" o. O6 K0 P* q; ]
1.1.3 应不应该学爬虫3
6 |4 [5 e8 t2 k, v1.2 网络爬虫是否合法3
8 M! g$ D4 ~/ z3 x4 u* f U1.2.1 Robots协议49 J6 x5 P. w( k1 J0 [- U' x
1.2.2 网络爬虫的约束5 P( J8 Z% [ ~% A
1.3 网络爬虫的基本议题6
1 Z4 ?6 q3 Q# y' S1.3.1 Python爬虫的流程77 u9 P+ K( H |- X) i3 S4 C
1.3.2 三个流程的技术实现7; Z ]/ u1 `1 T
第2章 编写第一个网络爬虫9* V6 z, E7 g$ n$ N
2.1 搭建Python平台10
. A, A7 q; D6 _6 p W2.1.1 Python的安装10- `& i& _ m$ D& V! m8 d+ c
2.1.2 使用pip安装第三方库12. N) ?& ~% l6 \
2.1.3 使用编辑器Jupyter 编程13
% e: _. x+ ~, h% G$ ~2.1.4 使用编辑器Pycharm编程156 a+ S: m/ z3 H3 m% Z. F* e
2.2 Python 使用入门18
1 L) h( R0 x1 `; a! \$ W9 m& W, I2.2.1 基本命令18
3 J" T5 F; s* `, s, E: \* m' h1 [2.2.2 数据类型191 D6 T' o" r) b1 `0 h
2.2.3 条件语句和循环语句213 X9 X5 z1 v; H+ b
2.2.4 函数23% t f. x) R5 E# p7 u
2.2.5 面向对象编程24$ @9 w& h; g( y' T9 L* P
2.2.6 错误处理28! V% t0 Q9 |6 j7 m& e
2.3 编写第一个简单的爬虫29
1 B7 M$ r- b$ g2.3.1 第一步:获取页面29
3 ?6 d$ U! [6 R% P0 a2.3.2 第二步:提取需要的数据30
3 z+ V. L0 G6 _ f1 x: }% D2.3.3 第三步:存储数据32
- A* Q! s3 x* [6 e4 {# [3 J2.4 Python实践:基础巩固33' J' z9 ^7 U0 b0 Q. {
2.4.1 Python基础试题34; r) K9 T5 A4 k3 K7 Y% X5 {
2.4.2 参考答案353 ^" W) D8 }0 X7 N2 G& J
2.4.3 自我实践题38! k. X$ l3 F' y
第3章 静态网页抓取39
- g% ^8 p4 n" `2 s: O! q3.1 安装Requests40
! c: C' e+ d- y6 f7 z3.2 获取响应内容40
1 Q' w9 Y4 W0 ~* G8 A3.3 定制Requests41; U: U7 P0 o* j( k% U
3.3.1 传递URL参数41
% G6 T$ |( H0 w7 ]& L$ g2 U' t3.3.2 定制请求头42
" u$ f6 n4 c3 j! [3.3.3 发送POST请求43
( v3 Y* i7 G6 I+ \* g- A3.3.4 超时44
$ ^! \# S' l+ b4 I7 G" G) s: t3.4 Requests爬虫实践:TOP250电影数据44
. F) }; d5 v- q9 X' O3.4.1 网站分析45
; S" j# U7 Z( A3.4.2 项目实践45
0 m0 H$ @! ]- j9 m* b1 `3.4.3 自我实践题471 Z2 h0 Z2 i- v$ m
第4章 动态网页抓取48! W. A# J! S4 ]$ |, K% \
4.1 动态抓取的实例49
- ~/ l" z! k4 c4.2 解析真实地址抓取50
' y* Z, J( g& x) q# L4.3 通过Selenium模拟浏览器抓取55
4 i) ]; _# Q7 N1 _8 H4 E4.3.1 Selenium的安装与基本介绍55
- D9 s; k( j# W b" z6 N6 w4.3.2 Selenium的实践案例57, h9 Z9 g$ C' X% }( H- l
4.3.3 Selenium获取文章的所有评论58
4 v% G, J* i9 j' P4.3.4 Selenium的高级操作61
1 M2 j& s* {& X$ U2 J. e+ E4.4 Selenium爬虫实践:深圳短租数据64: X/ i1 i" C e
4.4.1 网站分析648 s; W1 Q6 _& q5 H. A, G
4.4.2 项目实践66
$ ^* L0 Q; L; p% k4.4.3 自我实践题69% R+ X* w7 R% y7 D
第5章 解析网页70
$ Q0 k/ q+ i1 H# f3 y! g5.1 使用正则表达式解析网页71
$ k( t; ~0 Q7 r8 l- L/ q5.1.1 re.match方法71
, F/ K$ B; Q5 ]" Y5.1.2 re.search方法74
% w0 D4 I' |% v$ f4 R- H* ]* g3 c5.1.3 re.findall方法74
0 O, \! U& {* Q9 p5.2 使用BeautifulSoup解析网页766 p$ p8 J/ |2 \+ r; i8 m. q
5.2.1 BeautifulSoup的安装760 ?" a* R' `9 v
5.2.2 使用BeautifulSoup获取博客标题77* ^& C5 x5 B0 h4 p [7 x3 `" S3 h
5.2.3 BeautifulSoup的其他功能788 m+ |$ L( `5 f7 c3 f
5.3 使用lxml解析网页82
N. x$ N; U" q5.3.1 lxml的安装82
0 H% s" ?" ]6 w5 u" q: A- C5.3.2 使用lxml获取博客标题82; A+ l, q; j. F% j* d
5.3.3 XPath的选取方法84
( g/ V* H8 O( ` i; B9 K5.4 总结850 q- K/ V) a# r7 ]: {
5.5 BeautifulSoup爬虫实践:房屋价格数据86
4 z! r1 i x+ g1 e3 f5.5.1 网站分析86
2 f* H, r( E& h. }$ U$ S$ Q% p0 d" p: i5.5.2 项目实践87, j- I& j1 Z9 G6 d; i7 Q
5.5.3 自我实践题89. X/ F7 g0 I+ v. n, N- A! k
第6章 数据存储905 G. H: m% [' i: X, F; p V8 I& h
6.1 基本存储:存储至TXT或CSV91
9 Q5 @5 a- |& ?# Y0 u$ `6.1.1 把数据存储至TXT91! f% C% b& C) ?9 L5 P! A, b
6.1.2 把数据存储至CSV93
! l& G4 a1 v# u6.2 存储至MySQL数据库94
M+ i; f5 O- k: ~+ f6.2.1 下载安装MySQL95
6 i. m& |4 L! @9 ]6.2.2 MySQL的基本操作99
! m9 l p7 X0 R+ J. Z. w) r6.2.3 Python操作MySQL数据库104 U' A1 @, _3 I4 b3 M/ q
6.3 存储至MongoDB数据库106
7 W8 P5 s# g1 ?1 |9 S. `: N( F: L6.3.1 下载安装MongoDB107
" \2 `# E3 f5 G1 g6.3.2 MongoDB的基本概念110' [# E3 |% @# e/ U
6.3.3 Python操作MongoDB数据库1120 K0 K) k9 ?' b4 ^
6.3.4 RoboMongo的安装与使用113" g6 C( }/ p! O
6.4 总结1155 A5 G$ K m4 w k2 j! S
6.5 MongoDB爬虫实践:虎扑论坛116
% z' x2 a, A0 @: B6 p6.5.1 网站分析116
. o" b" f2 ^" g# B8 p0 l. _8 n, M; A6.5.2 项目实践117
9 r7 {0 e, P# k% x) @- {/ z6.5.3 自我实践题123
- C7 j( v* x" S# h5 f+ v3 E' H1 g% q第7章 Scrapy框架124
) y3 h) L, |0 t5 T5 J, l! J7.1 Scrapy是什么125/ O2 ~$ L* `& x# o
7.1.1 Scrapy架构125
% \* e/ o$ g# e& P7.1.2 Scrapy数据流(Data Flow)126
/ S5 _4 K9 L% z* X# P# p2 x6 T7.1.3 选择Scrapy还是Requests+bs4127
/ w3 n% C8 Q+ |( t$ N7.2 安装Scrapy128) |" E# }: q4 }" O
7.3 通过Scrapy抓取博客128
. Z, M3 O! L, R7 _# K$ S1 B7.3.1 创建一个Scrapy项目128
3 i% [: d- ]7 b1 G! O6 K. z7.3.2 获取博客网页并保存1290 H: U. I9 q$ r8 N$ d2 K; j
7.3.3 提取博客标题和链接数据131( a; W* E( a/ l2 E0 V* J. v
7.3.4 存储博客标题和链接数据133* d- U, g, [4 c7 a+ j- z9 W
7.3.5 获取文章内容134& p' K# L9 Z! j, d- e1 c
7.3.6 Scrapy的设置文件136
1 f- E( S; d1 p2 H7.4 Scrapy爬虫实践:财经新闻数据1376 k6 P3 m( o/ ~. f& c; U* M
7.4.1 网站分析137
/ Q& s6 D& L, L$ ?7.4.2 项目实践138
0 p! T$ N( R- k' Z- f6 ?) \7.4.3 自我实践题141: g3 Y, q0 `0 f
第8章 提升爬虫的速度142
) j8 U5 X- o6 z3 ~* J |6 y8.1 并发和并行,同步和异步143# |: \" d0 o; Y+ c0 O
8.1.1 并发和并行143& g9 O) L3 }8 H+ o+ c; b
8.1.2 同步和异步143
3 ~$ |3 o; f# `! r; ^8.2 多线程爬虫144
/ T- U# ?# i9 k+ H; h8.2.1 简单的单线程爬虫145
9 }' L. M5 o# @- E/ O$ g* x8.2.2 学习Python多线程145
3 F/ a; ^4 k; G. x1 A8.2.3 简单的多线程爬虫148
- x9 B1 F! y! w0 T6 A/ {" c8.2.4 使用Queue的多线程爬虫150: Z2 X0 C0 V2 v: }/ @$ k* f' K
8.3 多进程爬虫153; F* S4 K6 y' v- d' E
8.3.1 使用multiprocessing的多进程爬虫1530 }$ P+ X2 S- J1 L% Y
8.3.2 使用Pool + Queue的多进程爬虫155+ v; C( F. V, H1 l6 a* g
8.4 多协程爬虫158- t0 q3 S+ `- i! L& M1 M5 S0 D9 e
8.5 总结1606 g- Z6 ]/ X/ L4 e) j
第9章 反爬虫问题163' b; |6 R0 C9 _) W
9.1 为什么会被反爬虫164
, Q, q! e# ^) ~9.2 反爬虫的方式有哪些1644 H5 {/ @7 d' |" `$ p; x: A
9.2.1 不返回网页165& ^, e+ l+ f4 |8 e1 v' b# _7 m
9.2.2 返回非目标网页1651 g/ R0 q2 d* w9 [, h* ~, @
9.2.3 获取数据变难166
; O# V2 R- U: V* M8 l) e9.3 如何“反反爬虫”1671 v, ]5 n$ O9 B8 K1 b
9.3.1 修改请求头167
- |+ `" ^# G( Q' w9.3.2 修改爬虫的间隔时间168) u, U* l, F" w/ j
9.3.3 使用代理171
1 ~$ K! D; l# P* {2 \' d/ m9.3.4 更换IP地址172
& K& z) ~+ Z1 _9.3.5 登录获取数据172
7 E7 j! X0 J6 @6 z% `. |3 z) @; E2 {9.4 总结1721 O5 a, L! N8 s
第10章 解决中文乱码173& D- p; E2 W4 }6 q
10.1 什么是字符编码174. E) v/ K! i& S/ O! w! g
10.2 Python的字符编码176( c! Z# M& b( ]" d
10.3 解决中文编码问题179) d ?, J! x+ M9 o
10.3.1 问题1:获取网站的中文显示乱码179
/ R2 v& f6 y* g2 e @* W10.3.2 问题2:非法字符抛出异常180
1 K2 K4 ?( T, h. F10.3.3 问题3:网页使用gzip压缩181
' Z- X, c r) d K# k9 V4 h0 c! T10.3.4 问题4:读写文件的中文乱码182/ {+ H" E9 _7 s0 u
10.4 总结1848 u$ a4 g" p8 J
第11章 登录与验证码处理1853 h* _% \7 n$ b
11.1 处理登录表单186
# P$ [& U7 M5 M o+ e4 p( K11.1.1 处理登录表单186! A0 i: ^& _7 U3 Z3 F C
11.1.2 处理cookies,让网页记住你的登录190( N8 J' ]# w! M/ o" ?) Q
11.1.3 完整的登录代码193
$ j6 [7 `- o7 E9 y, _* {11.2 验证码的处理194
6 J% c* R, G3 g8 L# _+ c5 }) ]11.2.1 如何使用验证码验证195- r; X6 I: p& n! i" B$ F7 X, e
11.2.2 人工方法处理验证码197+ [. a/ S# [ p) b
11.2.3 OCR处理验证码2003 Y% @% i& D: R" ?
11.3 总结203 ]! c) w, U. Z* r+ @* {
第12章 服务器采集204. j8 s, d2 o7 r& {! W% H3 ]! \5 O, N
4 |0 n& v' y+ o# r7 j" S
此书已加入到VIP会员卡,只要购买VIP会员卡即可免费阅读上百本电子书,这张VIP卡除了免费让你读书,还有更多的权益等你来领,往下↓拉
# Q: |% M4 x1 D$ ^. [0 u5 y* [$ {, g `$ u) O9 y9 l5 Z' h; D
) N- u1 |2 V4 T( l& H9 f9 Y; E+ L
阅读电子书的方法如下:
/ _& ^! S) e0 o! o: S" n: _) r' N% \0 z3 z7 J, a* i! T1 c; R5 b
打开CSDN APP(软件商城搜索“CSDN”即可找到哦)—>登录CSDN账号—>学习—>电子书6 T1 g3 f$ d. M+ y$ E; ^7 R
; z, u/ f) d: h% W0 R' A% S8 O9 ]& ]1 U: V5 k( X
————————————————) ] B+ d! |. [; B: [8 W1 U8 F
版权声明:本文为CSDN博主「好书精选」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
3 x& c; F( D5 V: o3 s6 f/ A原文链接:https://blog.csdn.net/weixin_37649168/article/details/104265388
5 H7 @0 W/ A6 z1 ?" {2 D. S- {4 n" T9 m' {" y
1 E( _9 d# G" g) O7 _
|
zan
|