- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 81
- 收听数
- 1
- 能力
- 120 分
- 体力
- 539940 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 167360
- 相册
- 1
- 日志
- 0
- 记录
- 0
- 帖子
- 5324
- 主题
- 5250
- 精华
- 18
- 分享
- 0
- 好友
- 163
TA的每日心情 | 开心 2021-8-11 17:59 |
---|
签到天数: 17 天 [LV.4]偶尔看看III 网络挑战赛参赛者 网络挑战赛参赛者 - 自我介绍
- 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
群组: 2018美赛大象算法课程 群组: 2018美赛护航培训课程 群组: 2019年 数学中国站长建 群组: 2019年数据分析师课程 群组: 2018年大象老师国赛优 |
教你如何编写第一个简单的爬虫
, H: S6 @- {7 }5 S很多人知道爬虫,也很想利用爬虫去爬取自己想要的数据,那么爬虫到底怎么用呢?今天就教大家编写一个简单的爬虫。
# p- J, p' h( q. a! S( I
3 u) g `- G2 W6 |3 L! q下面以爬取笔者的个人博客网站为例获取第一篇文章的标题名称,教大家学会一个简单的爬虫。, s! y! Y7 O8 U; k/ x; s
5 z8 `- a( A n, x$ I第一步:获取页面
% f6 W' M+ l' ]7 H* g1 ^) M# V# p6 x& ~- W7 Z
#!/usr/bin/python! R. O/ w6 }7 l+ Y& Y: ?
# coding: utf-8
: {$ _# i8 Q ?" Z0 T0 r! m3 Y0 S
import requests #引入包requests
, c/ H( N4 O2 ]! }* u0 c M% Elink = "http://www.santostang.com/" #定义link为目标网页地址
) g( G* E0 \1 W" @+ C) L# 定义请求头的浏览器代理,伪装成浏览器
+ ~; ~6 ]* I$ Eheaders = {'User-Agent' : 'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6'} / o1 c9 a' Z& @. z' t, ]% |
+ I3 a. n: \, \r = requests.get(link, headers= headers) #请求网页" m4 U& n; w3 y8 k4 O- D
print (r.text) #r.text是获取的网页内容代码
! F! {6 [/ Q; @, l7 t+ L8 ?1
' f. f! V- \' M1 D) [9 k2
* m' W6 O9 N/ n& M4 ]& L/ W0 o0 ]3/ R! f# h0 K( I9 M* c
4
9 T5 r [# r& L* r9 m! H5) Y4 D1 o8 M5 k7 F
6& ]+ y* ]$ x6 t' D8 t6 z
7% O2 X3 L' c' q/ `
8
% L, T0 r/ S: r8 f5 e9; Q2 _' X8 j1 w2 `" U6 l
10
! g- \1 { D! s上述代码就能获取博客首页的HTML代码,HTML是用来描述网页的一种语言,也就是说网页呈现的内容背后都是HTML代码。如果你对HTML不熟悉的话,可以先去w3school(http://www.w3school.com.cn/html/index.asp)学习一下,大概花上几个小时就可以了解HTML。
* P6 \& B8 y' L: S" U- f& R
/ f& I# i8 i$ L( z' n) j# u/ U在上述代码中,首先import requests引入包requests,之后获取网页。" H" @, O/ L0 F2 g8 [, w1 e' f! K
. {$ g6 B" k* f. C2 q3 t(1)首先定义link为目标网页地址。
, Q3 |2 u2 N U g6 k; i, s5 h/ A0 K; _6 c* I, O
(2)之后用headers来定义请求头的浏览器代理,进行伪装
6 l7 Q+ }# t$ V2 Q$ f: v3 B
9 S, B/ Z$ c6 W(3)r是requests的Response回复对象,我们从中可以获取想要的信息。r.text是获取的网页内容代码。
: Q$ R( f( ~" d
# s6 x F5 M; u: X& B7 S运行上述代码得到的结果如图所示。5 R! ^) t+ \0 S
1 ^- D- S9 @" [6 w3 M1 l9 t1 V9 c# O# u! n7 ]5 ~
第二步:提取需要的数据* g5 a' C% f8 E+ r
$ X& ~4 e6 W0 u3 f7 R#!/usr/bin/python0 J! D2 n# e; E7 O% M$ E
# coding: utf-8) h6 ]" ?5 f( e
+ u! [( p' [; A) x0 F! d0 e. A
import requests+ q0 m+ R4 n$ l( T A
from bs4 import BeautifulSoup #从bs4这个库中导入BeautifulSoup+ D5 @! D& A/ g4 y
2 k0 a/ Y7 a& B0 O3 Z
link = "http://www.santostang.com/" u K4 k# Q' n3 _9 E% p( x, R
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'}
- e% E! X3 f3 T+ cr = requests.get(link, headers= headers)6 S* o5 b! u. c. J! I2 Y
+ t0 e6 c! | E, Asoup = BeautifulSoup(r.text, "html.parser") #使用BeautifulSoup解析* i! e4 M0 ]5 J9 Q5 M' N
9 ?) `! `# ~# ]# h#找到第一篇文章标题,定位到class是"post-title"的h1元素,提取a,提取a里面的字符串,strip()去除左右空格0 \/ o" E3 i- a8 o5 R
title = soup.find("h1", class_="post-title").a.text.strip()
* X6 B) r9 d* J- k' i! K9 i: ]print (title)" U+ I7 S) `4 ~9 P$ `
1
" f3 f3 P& Z5 R7 ]* D6 L: q+ U24 B3 g* ^, J0 I
3
' S1 G- i# [5 [* l8 K* }: n% g, f4+ ?$ S% L3 [$ g% J9 z) C
53 x- u9 Z* o! B' m u6 _, }
6) N9 R( j& d4 X, L* G; ^$ y
7
% F, m" r- a' v8$ e m5 c' v) F+ k3 P/ N
9
4 ], |# Q! W- C2 w. p p) o! w' S7 ?10
7 i4 W# D, K4 }& R! {. h11
* o, o' W' \+ D2 r122 \6 R# D9 s, T
13% d1 h% _/ E* \) I
141 ?% S; }* Y5 ?' T1 C
15
% |( M6 K q; f' Z( l$ n0 j在获取整个页面的HTML代码后,我们需要从整个网页中提取第一篇文章的标题。% O) {0 Z3 F- J' k" O. C2 A
. `4 C3 _- g, L4 x! i; x
这里用到BeautifulSoup这个库对页面进行解析,BeautifulSoup将会在第4章进行详细讲解。首先需要导入这个库,然后把HTML代码转化为soup对象,接下来用soup.find(“h1”,class_=“post-title”).a.text.strip()得到第一篇文章的标题,并且打印出来 {7 G" x9 |1 k
) q' k3 R% w* P' p' L: Vsoup.find(“h1”,class_=“post-title”).a.text.strip()的意思是,找到第一篇文章标题,定位到class是"post-title"的h1元素,提取a元素,提取a元素里面的字符串,strip()去除左右空格。0 v- m0 s: A! E( ^6 \0 ~. E
+ w: j5 z# M# m4 i
对初学者来说,使用BeautifulSoup从网页中提取需要的数据更加简单易用。& j3 l% s% b8 r1 l: m
5 T* K6 g9 ^5 T: m* X) ?
那么,我们怎么从那么长的代码中准确找到标题的位置呢?8 K' u+ Z0 I5 P1 z
% t9 u/ M+ H6 h% Q% i+ O4 S这里就要隆重介绍Chrome浏览器的“检查(审查元素)”功能了。下面介绍找到需要元素的步骤。
0 H. k( h$ Q+ {& x# `1 s% z4 @8 S8 L4 o1 }
步骤01 使用Chrome浏览器打开博客首页www.santostang.com。右击网页页面,在弹出的快捷菜单中单击“检查”命令,如图2-17所示。1 t3 s m1 q) t+ S* X
4 D5 \5 d, L5 u6 \
}' G6 |4 p. v1 T4 ?
% Y1 m1 U8 P% l/ w7 h步骤02 出现如图2-18所示的审查元素页面。单击左上角的鼠标键按钮,然后在页面上单击想要的数据,下面的Elements会出现相应的code所在的地方,就定位到想要的元素了。
, {( C" I; v. f: N, z
: e/ O# w. C; W( e' B/ j+ ^7 B1 u/ n' K5 V
5 @. K2 I3 n3 S1 s1 c v `1 F
图2-18 审查元素页面* W* a( ^; [7 s9 A2 g7 i
步骤03 在代码中找到标蓝色的地方,为+ ]* e$ q# `' ^. {( k
" A& }- ?- X6 I1 V$ J
echarts学习笔记(2)–同一页面多图表。我们可以用soup.find("h1",class_="post-title").a.text.strip()提取该博文的标题。/ p/ j( X0 S1 ^* B! `: k
8 s/ t7 `' Y; H3 t- v6 o第三步:存储数据- c' o( p+ u, T( F0 B# y: U
2 @. {7 p1 b, y8 [
import requests
1 ]* [$ U; H$ V2 P) A4 ifrom bs4 import BeautifulSoup #从bs4这个库中导入BeautifulSoup
- h; @& J r& I8 B, D4 \( K
: c- h$ Y( w7 O! e" x8 q0 ]: ]link = "http://www.santostang.com/"4 ` W" H# Y, ]' [% c7 S3 U8 P
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'}
& @$ M( Z5 p# zr = requests.get(link, headers= headers)
5 P M/ L2 R, V5 b0 J+ L; t9 I+ k) \9 l: u" [
soup = BeautifulSoup(r.text, "html.parser") #使用BeautifulSoup解析
; D1 q) I, Q8 _) Wtitle = soup.find("h1", class_="post-title").a.text.strip()8 G r+ {& q3 y) B
print (title)
) h' @8 U5 ?' Q, G7 |8 J/ M5 M- N3 I: |
# 打开一个空白的txt,然后使用f.write写入刚刚的字符串title3 l- ?) t, h. E' }3 q
with open('title_test.txt', "a+") as f:
" k4 u0 E9 \5 I2 j0 b$ p4 Q$ _& S f.write(title)8 x7 A" S3 p7 I& g, a& Y1 H, Z! u
17 w& j# R9 p1 k7 I% B( l, I
2- D/ p- a. ]1 \7 T
3
; i4 [8 s7 D) L4
9 ^4 R1 o' }+ T4 D5
( k6 P0 V: q1 S1 Y, |1 r6
0 ?( `1 \5 N0 [ r2 i8 n' p% ?7
! B1 H) l( I, [6 d9 { g86 T. Y, y- G4 H8 Y% x' Y
9* e5 M# g& x/ S& v5 S
10
# g3 r# Q9 E! n11" h* v! s% F. p, C: }* x
12% P3 Z3 h3 t4 Y) |8 W% K
13
1 k+ f! d" S9 p% T148 R$ W k; J) w3 W
存储到本地的txt文件非常简单,在第二步的基础上加上2行代码就可以把这个字符串保存在text中,并存储到本地。txt文件地址应该和你的Python文件放在同一个文件夹。! A$ D2 I' X& ~+ n6 O5 Z, y
9 _0 Z7 N. k1 W8 O* j/ S; O
返回文件夹,打开title.txt文件,其中的内容如图2-19所示。
+ B& _# w" s8 N0 P! t% y
# f2 j6 ^( q9 G9 F以上内容就是本节要介绍的如何编写一个简单的爬虫的步骤,想要学更多爬虫相关的内容,可以到这本书里查哦《Python网络爬虫从入门到实践(第2版)》; ~- K; G2 y- p
: G' O" T% T! t h& l- E
3 Q, }/ u1 Q$ Q0 i Z, K目录
. b& Q5 P# d) o9 h f1 w6 j8 _* d( D5 d( S2 ] u) l" V
前言4 `1 ^" f. M7 j# h5 [
第1章 网络爬虫入门1/ o/ m, |8 h" \
1.1 为什么要学网络爬虫2/ z2 W% P5 v5 h) \2 P9 O
1.1.1 网络爬虫能带来什么好处2# V" I" Q& c" [2 P7 b
1.1.2 能从网络上爬取什么数据3% c7 r: O8 R6 ~
1.1.3 应不应该学爬虫3
- i; u& ^: h, Y& r* R1.2 网络爬虫是否合法3. n6 m# I3 H' `5 _ k0 L% _
1.2.1 Robots协议45 ~2 V2 L. r# l. u, m: G0 Y
1.2.2 网络爬虫的约束5) I0 U# \2 v5 ?* R
1.3 网络爬虫的基本议题62 O7 q: |9 Y- _: h; d
1.3.1 Python爬虫的流程73 N, `1 M5 k; F3 H) d& K" W5 A
1.3.2 三个流程的技术实现7) y, U0 K4 Z3 a7 U1 J
第2章 编写第一个网络爬虫95 p" E7 d4 W% ^% A: R: |
2.1 搭建Python平台10% \) j9 v9 u2 j2 K" ]
2.1.1 Python的安装10( P$ w' A3 R- L) `( p8 O, _* Y
2.1.2 使用pip安装第三方库127 M: U7 D' f4 P7 ~' R5 V: m
2.1.3 使用编辑器Jupyter 编程13
) p$ p [0 @6 R% D/ d9 v2.1.4 使用编辑器Pycharm编程15
* ?. d1 l6 P$ B1 t. y; r1 b2.2 Python 使用入门18$ \6 b# v* K7 n6 U* }+ k, s
2.2.1 基本命令18; ~2 `1 F) j, K' ^
2.2.2 数据类型19: n/ D+ g- M- T7 i# i% K8 X
2.2.3 条件语句和循环语句21
: A4 e1 \2 C" P/ m6 @% K. I2.2.4 函数23# {, U2 S7 n# R) T- A
2.2.5 面向对象编程24" H7 I/ }1 F; Q* M& Y5 {
2.2.6 错误处理28# S( z. ~. t" @4 T# \ O$ r
2.3 编写第一个简单的爬虫29
F6 x* Z1 E$ ~! i6 Q! H% P2.3.1 第一步:获取页面290 n9 S4 d& s& ^/ [8 c
2.3.2 第二步:提取需要的数据30
8 v# g) F K4 I9 e2.3.3 第三步:存储数据321 @) x2 p% ?0 d5 V
2.4 Python实践:基础巩固33
- ?6 h3 t" d4 j( w- P* e$ L8 p% @9 m2.4.1 Python基础试题34
2 ?0 f, N0 T7 b# T! {" C6 P* g/ m2.4.2 参考答案351 t% p$ u) x/ q# G N
2.4.3 自我实践题38
" p! ?8 p; w* R: a, [7 M第3章 静态网页抓取39/ c L5 M. T) r3 t0 S7 M& @
3.1 安装Requests40
( j+ [8 J, k! t/ f! W& ^' \3.2 获取响应内容404 g: o7 ^+ X$ s' e+ }8 W- s, \' C5 J
3.3 定制Requests41
0 l7 h: V6 g8 q, O3.3.1 传递URL参数41
& ^5 A4 I0 U. e ^# [3.3.2 定制请求头42
: ^" G" ^' o8 d# F3.3.3 发送POST请求438 s5 b3 l+ X8 J6 r
3.3.4 超时44
( ^2 G& Q: x) ^; m+ I3.4 Requests爬虫实践:TOP250电影数据44
( {3 p6 Z" ~9 e( s3.4.1 网站分析45
3 i s! o1 V1 t0 q, l3.4.2 项目实践45/ w3 B9 D; w3 F* J p; y) L
3.4.3 自我实践题474 @. `: H O4 O# x, ]9 ] Z
第4章 动态网页抓取48
, ^# B) ]( e3 F ?" `4.1 动态抓取的实例49( \/ v0 O3 q8 ?! T0 w1 F
4.2 解析真实地址抓取50
* i) Y5 a" m* {+ L' w: _4.3 通过Selenium模拟浏览器抓取55
0 c; m; }# v3 {9 p" D s4.3.1 Selenium的安装与基本介绍55. d% k/ V: ]2 P9 I0 f
4.3.2 Selenium的实践案例57( I Q/ M) B% n* x& v8 s, O9 k
4.3.3 Selenium获取文章的所有评论58
5 b% T; Z7 d2 r9 I& b+ x4.3.4 Selenium的高级操作618 T) y) b2 M/ r8 b
4.4 Selenium爬虫实践:深圳短租数据64! W9 z% X9 J# \+ Y" i
4.4.1 网站分析64
X. f5 o' m% L1 ?9 X% ]4.4.2 项目实践66
' x v: `; q$ O. L( J4 m& X! u/ A4.4.3 自我实践题69
" V) U, l0 Q' ~" x" J" x* ^第5章 解析网页70( c- k9 t1 {) `% G( C! B
5.1 使用正则表达式解析网页71( P( M- K( l. V+ H: `
5.1.1 re.match方法71
+ E, K; f/ ]) q6 b) Y5.1.2 re.search方法74: \* ]/ b# w# H
5.1.3 re.findall方法74) g+ d* c. {2 N
5.2 使用BeautifulSoup解析网页76% S8 g" `2 l& g* O+ M; q
5.2.1 BeautifulSoup的安装769 l9 F! ]+ |+ ]; s" H- y$ ~9 E" M
5.2.2 使用BeautifulSoup获取博客标题77- e( o' ?+ Z1 A4 F" V/ k
5.2.3 BeautifulSoup的其他功能78+ ^2 X" m' I5 f, R4 ?5 _- s
5.3 使用lxml解析网页82
4 H, b( q( I9 c. F5.3.1 lxml的安装82- [* w( }+ T: {! H" N
5.3.2 使用lxml获取博客标题82
- `& V8 _* x" X0 i( q5.3.3 XPath的选取方法84
) O& N5 l) X* Y. ~/ K5.4 总结85+ G2 V) Z& m% t5 z* ?1 p
5.5 BeautifulSoup爬虫实践:房屋价格数据86
( r1 Z6 u; v! h& ^- `5.5.1 网站分析86) R( d& B) U+ C& K" y* N: ^" ?7 Y
5.5.2 项目实践87
. y2 E! L9 h3 g6 U4 S) q5.5.3 自我实践题895 V) j4 {$ |* u- @2 K
第6章 数据存储90& D7 `5 y+ u4 Y) Y" r6 x/ ?
6.1 基本存储:存储至TXT或CSV915 m3 c, o, o2 [! M0 n% T4 O/ J
6.1.1 把数据存储至TXT91
8 J6 i1 a9 c p, _6.1.2 把数据存储至CSV93
4 h- D: }" x; l3 W; ~6.2 存储至MySQL数据库94
$ ~# U& o2 A+ X' ^; B# M: M6.2.1 下载安装MySQL95
0 w: K. h2 N! d9 B% _* k+ \( I6.2.2 MySQL的基本操作99
7 \$ Z6 v9 M# b p0 p6.2.3 Python操作MySQL数据库104
0 G# ^5 ?( O" D9 o3 y) }6.3 存储至MongoDB数据库106
+ A# S9 d9 r0 r8 d0 ]6.3.1 下载安装MongoDB1077 k* k, q7 [# l$ T( L. K. p
6.3.2 MongoDB的基本概念110
$ R( D- _9 e& i5 v. o) \7 _6.3.3 Python操作MongoDB数据库112
, l7 n O. Y5 X; E: u z6.3.4 RoboMongo的安装与使用113
- d) d2 x8 H% M8 L$ l6.4 总结115
2 Q6 y" _# \; g0 D E6.5 MongoDB爬虫实践:虎扑论坛116
3 W( g6 O, c4 O3 h6.5.1 网站分析116
. ]5 ]. r7 b0 _" a ^6.5.2 项目实践117" o4 e$ i; c* s7 ?8 r4 l/ U
6.5.3 自我实践题123
9 d" r8 L& E" D9 O) l第7章 Scrapy框架124
1 M/ \ t Y2 I; k$ X- e7.1 Scrapy是什么125; y. E3 p" z# n: f. p2 O! O
7.1.1 Scrapy架构125
6 P# B+ J7 n" p9 L. E. ]7.1.2 Scrapy数据流(Data Flow)126; N3 h5 \9 T* z0 I/ m- \; r
7.1.3 选择Scrapy还是Requests+bs4127. L5 V+ q( l. @5 f; c4 I
7.2 安装Scrapy128
2 Z0 C1 t, ?! {7.3 通过Scrapy抓取博客128
$ Q1 I! u$ ^# c; e7.3.1 创建一个Scrapy项目1289 `7 L8 | K2 G/ U( F- S: d. N: p
7.3.2 获取博客网页并保存1298 v+ A# ~ Q7 |, N
7.3.3 提取博客标题和链接数据131
0 {; `" f }( f% Z1 x0 ] @7.3.4 存储博客标题和链接数据1335 s6 n2 k3 r8 ~( b! z; Z
7.3.5 获取文章内容134% E; S6 b, D- ?; x6 [% r
7.3.6 Scrapy的设置文件136
4 U% D$ U2 Z- J' [ j7.4 Scrapy爬虫实践:财经新闻数据137
+ |* t* V" k8 Z) ^) ~ M" a6 Q7.4.1 网站分析137
" d6 P& |, g: [9 w' i7.4.2 项目实践138
# y9 Y" C* I# I4 v5 X7.4.3 自我实践题141$ z3 O) s. `& n5 ]' D" [: a5 G
第8章 提升爬虫的速度142
9 l! Y. F' {3 i1 |8.1 并发和并行,同步和异步143
j) j# e) {6 Q2 t8.1.1 并发和并行143: `# \# t) J; Z P+ W$ D/ ~6 J; ?* g
8.1.2 同步和异步143
" t7 z/ G) m& N! g |+ r" a2 ?2 V$ X8.2 多线程爬虫144
1 J( ~/ ~; } k+ `9 E, f4 v8.2.1 简单的单线程爬虫145: N( p Z" G5 m7 b
8.2.2 学习Python多线程145- s2 T& t6 I# q8 O! T' X+ ?7 |8 ~1 y
8.2.3 简单的多线程爬虫148
$ A+ L- r* S; @* J) @- ^# X8.2.4 使用Queue的多线程爬虫150 ^& Y# D6 f# q( n- _9 I
8.3 多进程爬虫153
' ^+ Y* d. W1 Y: W5 \) d8.3.1 使用multiprocessing的多进程爬虫153
: R3 f3 f% I- ]# g/ j8.3.2 使用Pool + Queue的多进程爬虫155
# k: O4 D& v0 J8.4 多协程爬虫158# V( s. Q3 b) \# Z# E# p1 e9 I- M
8.5 总结1608 ]# ?( F% @( |
第9章 反爬虫问题1634 D, G' ]+ w. h0 Z9 f1 O# L8 m' Q
9.1 为什么会被反爬虫164
$ y6 d3 y, j+ e' B& J4 r9.2 反爬虫的方式有哪些164
$ r7 K4 f+ G; O8 ?; ]: B9.2.1 不返回网页165
) G/ {$ E/ m( E" `9.2.2 返回非目标网页165
. ]0 x5 D6 J! u5 ?, s9.2.3 获取数据变难166
9 k$ ^1 z1 Q, \5 o$ b E3 [6 i+ @9.3 如何“反反爬虫”167
4 d/ G, X" M+ P/ C9.3.1 修改请求头167$ {+ N3 D2 f7 }7 l! ]+ c D
9.3.2 修改爬虫的间隔时间168
3 O0 Y" R2 L+ O1 _; t" ^: W9.3.3 使用代理171
( L% {7 W0 b+ d5 ^; [: C( h9.3.4 更换IP地址172
% Y0 Z/ t6 O! h- u9.3.5 登录获取数据1721 c+ K: Z1 h% g0 I. w6 {1 J, ~
9.4 总结1728 G4 Q8 L$ R7 c
第10章 解决中文乱码173' K. |+ L1 Q, L! U! W' j# g
10.1 什么是字符编码1741 ]- c' J4 g( g, i4 L9 z. y+ ~
10.2 Python的字符编码176
3 F$ {" G' ]+ m. |+ n3 t10.3 解决中文编码问题179( {% E, |7 A3 g0 y, J0 f1 T( b4 i
10.3.1 问题1:获取网站的中文显示乱码179
0 Y1 T1 k& v4 j" W10.3.2 问题2:非法字符抛出异常180
2 r! V: J& ?, }: B4 R a7 y10.3.3 问题3:网页使用gzip压缩1810 R: m+ E; }( a3 `! {' k
10.3.4 问题4:读写文件的中文乱码1828 u5 ^0 A* K2 |( I' l, \
10.4 总结1840 w3 s2 s2 E' [+ [+ y$ ^
第11章 登录与验证码处理1852 Y8 i: c. B6 @0 o) c
11.1 处理登录表单1862 W; |. t( v' ~- M
11.1.1 处理登录表单1866 E" {! b' j2 M9 ?8 y# u& T+ D
11.1.2 处理cookies,让网页记住你的登录190
- h* u) C* T8 p7 R7 C: [" @11.1.3 完整的登录代码193
0 P! h1 Z3 g3 z: s6 M/ ?% U* X" \11.2 验证码的处理194
% m/ x. P$ w6 y: O11.2.1 如何使用验证码验证195. k, o o. l6 y# e X [
11.2.2 人工方法处理验证码197
# ^( ~, O6 y+ z11.2.3 OCR处理验证码2002 Q# a0 k4 K. v
11.3 总结203) a+ l6 Y4 t: o# y& \
第12章 服务器采集2046 |9 b) d u' h
$ v' a- q3 }2 M5 E此书已加入到VIP会员卡,只要购买VIP会员卡即可免费阅读上百本电子书,这张VIP卡除了免费让你读书,还有更多的权益等你来领,往下↓拉
9 B# n0 _: p2 N) e4 a
7 s* [4 d: M# X7 o- q
! f; y2 n; [" @' V4 w/ y阅读电子书的方法如下:
8 w5 l$ q7 c$ f0 ]
5 n* F0 n* H+ F$ a e打开CSDN APP(软件商城搜索“CSDN”即可找到哦)—>登录CSDN账号—>学习—>电子书2 L9 s% f2 v. W3 }( U. V
6 i9 E/ F9 ? {7 @( u
( t8 J ?* h; J————————————————* b" w! J% W9 ^+ B* ]( ~% K* y" S
版权声明:本文为CSDN博主「好书精选」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。# D' c1 p5 z: `6 Q8 R2 m- M& J
原文链接:https://blog.csdn.net/weixin_37649168/article/details/104265388
- W& L" m& v; n! A0 ]
) C! q: j2 T. {& T- y
- H% q. i% A. N, ?/ a |
zan
|