- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 563399 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 174243
- 相册
- 1
- 日志
- 0
- 记录
- 0
- 帖子
- 5313
- 主题
- 5273
- 精华
- 3
- 分享
- 0
- 好友
- 163
TA的每日心情 | 开心 2021-8-11 17:59 |
|---|
签到天数: 17 天 [LV.4]偶尔看看III 网络挑战赛参赛者 网络挑战赛参赛者 - 自我介绍
- 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
 群组: 2018美赛大象算法课程 群组: 2018美赛护航培训课程 群组: 2019年 数学中国站长建 群组: 2019年数据分析师课程 群组: 2018年大象老师国赛优 |
教你如何编写第一个简单的爬虫/ H1 o7 G4 G$ e
很多人知道爬虫,也很想利用爬虫去爬取自己想要的数据,那么爬虫到底怎么用呢?今天就教大家编写一个简单的爬虫。; @4 _! H2 f, G. v
3 V! d5 T; E& |) ?% U1 i3 M6 T下面以爬取笔者的个人博客网站为例获取第一篇文章的标题名称,教大家学会一个简单的爬虫。3 h! ]9 _: ` c$ E) K) d! n. m
5 s# w* @& k- s' p7 q
第一步:获取页面: |+ A8 n% u2 ^+ {8 r
9 z% T% r& q) M* W. P#!/usr/bin/python6 W. k; |2 C6 x8 k5 p L: q# L
# coding: utf-8- T: \) X* `. v' s: g/ ?0 k
0 O: b- M+ Z+ q* Y
import requests #引入包requests2 ~: W/ ~0 f) A s
link = "http://www.santostang.com/" #定义link为目标网页地址; W1 f- f4 T4 ?
# 定义请求头的浏览器代理,伪装成浏览器
$ L+ B4 X* l6 @+ r+ Lheaders = {'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 C6 L/ l( _: Z& Q
$ T/ i/ L7 |( ^8 Sr = requests.get(link, headers= headers) #请求网页" P; _' c( M3 y% }& o ~+ J
print (r.text) #r.text是获取的网页内容代码2 S9 G7 E! m) d( T' N2 L
1
- H p8 f+ s% G7 Q+ {2 H20 \2 Z9 p7 D9 y ?% W8 p' Q
3; G! |3 b6 M; X' J, {* R- h
4
6 t! U& f: ?. r& W" {9 o, n2 v5: a& G% ^# H" l& @3 i' Y. l: Z- z
65 H$ H- x, O/ U" {+ ^
7
9 m) e9 `5 M' [81 s- M# P/ h8 ]
9
2 f8 L2 ^( C7 R104 v2 W- m8 g4 I. v3 W0 C! C' e1 ?
上述代码就能获取博客首页的HTML代码,HTML是用来描述网页的一种语言,也就是说网页呈现的内容背后都是HTML代码。如果你对HTML不熟悉的话,可以先去w3school(http://www.w3school.com.cn/html/index.asp)学习一下,大概花上几个小时就可以了解HTML。
: X, P, c6 j8 `) T$ k
. x4 N0 q4 f8 X/ r9 ^ t" {在上述代码中,首先import requests引入包requests,之后获取网页。( U" D+ `9 F" H* t% Q5 U
0 X/ v+ m U% x' u(1)首先定义link为目标网页地址。2 b# y, E' j" g! D6 N( ~
! j' B' \$ c3 L1 M/ H. h8 ?(2)之后用headers来定义请求头的浏览器代理,进行伪装
: r& g$ \ r E( w6 W3 M! C' _; l
+ m9 |6 R3 Q( D: t! G. g(3)r是requests的Response回复对象,我们从中可以获取想要的信息。r.text是获取的网页内容代码。
/ |# I5 F) {' Y4 i( [- y9 P" ]" B+ S7 }; v. d0 @# ~: u) q
运行上述代码得到的结果如图所示。5 W7 L: z( f2 u
1 P- i) F: @- _1 | B& s4 u' @
第二步:提取需要的数据5 g; s9 B4 A8 q
2 r, f5 j. D; E/ z) G
#!/usr/bin/python4 I+ c4 ^1 l9 f0 k
# coding: utf-8
2 L7 N+ U4 q2 {5 _, p6 f; L/ S1 B1 C. y
import requests7 V, l. q9 x% L; N G
from bs4 import BeautifulSoup #从bs4这个库中导入BeautifulSoup
' {2 n7 u, h: M( e1 i
+ A; [6 _: r" N& alink = "http://www.santostang.com/"
% u3 J) e V% C3 E- B. hheaders = {'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 h6 I! W/ X8 `& U3 e0 K p
r = requests.get(link, headers= headers)# t1 [/ J1 q: c
, S4 e# K j3 v: r; r
soup = BeautifulSoup(r.text, "html.parser") #使用BeautifulSoup解析3 ^6 m2 Z2 u: B4 D P7 v
% K; `5 n' M0 L, p+ x1 A7 \ R" j
#找到第一篇文章标题,定位到class是"post-title"的h1元素,提取a,提取a里面的字符串,strip()去除左右空格9 e0 |" L1 Z: E
title = soup.find("h1", class_="post-title").a.text.strip()
- B% l/ c4 S6 l' pprint (title)+ Q% z4 g* V& j$ `+ Q6 j# n
1
( n' U( W- y! J! x3 ]( C' Q5 ]. m, {22 L2 j X5 M* g1 t+ p* B6 U& k0 m
3
: K# l1 k( y5 m% F, |: R8 }/ v4- F7 C6 K# S% R+ S- o" a! X" t
5$ w/ Y9 l [$ D1 {" c9 I
6
2 r2 I0 S' g6 F5 |0 W3 @7
" ?6 w+ B$ x8 S4 [! W8/ Z/ R: f* J. m8 H. q
9
+ E4 x, [$ u3 a: q1 C9 o* x l% a10( h% x9 K5 V( W4 Y
11
" G+ R5 A; V3 W% I) p4 f! J C12$ ?/ ~- V: q9 `* q! c$ \( l3 N; Z' h
132 U; B$ ^# A% Z. I5 q; P! ]' e! b, D, _
14 o" a1 ~- y4 G2 P6 S* s* [) f
15
* |# N2 }9 i. `1 U7 F) g' D5 |在获取整个页面的HTML代码后,我们需要从整个网页中提取第一篇文章的标题。2 g& s* ~" f: A5 G6 ~) s! P5 z
& b- K5 J, x1 x ]% d" K这里用到BeautifulSoup这个库对页面进行解析,BeautifulSoup将会在第4章进行详细讲解。首先需要导入这个库,然后把HTML代码转化为soup对象,接下来用soup.find(“h1”,class_=“post-title”).a.text.strip()得到第一篇文章的标题,并且打印出来
2 `: z2 D. k- g8 n# V3 u) B2 y
H F8 V: }. Y$ Osoup.find(“h1”,class_=“post-title”).a.text.strip()的意思是,找到第一篇文章标题,定位到class是"post-title"的h1元素,提取a元素,提取a元素里面的字符串,strip()去除左右空格。
+ n3 M' [( w$ r0 F; y
9 e! b9 Z3 g0 K对初学者来说,使用BeautifulSoup从网页中提取需要的数据更加简单易用。! s" O2 u5 p7 E/ n
& c3 u0 k! \2 N. e, G) c$ [那么,我们怎么从那么长的代码中准确找到标题的位置呢?
+ R$ B7 ^/ K- _( F% Y5 q6 X
, ^0 J6 K- D8 G. v9 J6 Y这里就要隆重介绍Chrome浏览器的“检查(审查元素)”功能了。下面介绍找到需要元素的步骤。
- _ [; O8 ~' A. M" M- z! X" y" {1 N. Y; f
步骤01 使用Chrome浏览器打开博客首页www.santostang.com。右击网页页面,在弹出的快捷菜单中单击“检查”命令,如图2-17所示。. E- e8 Y1 @# J) \+ Z& w
# |) ^4 C) E* u- r& f+ p o. D( S& i" {6 @% b
+ k) n2 W$ n0 B- k# D
步骤02 出现如图2-18所示的审查元素页面。单击左上角的鼠标键按钮,然后在页面上单击想要的数据,下面的Elements会出现相应的code所在的地方,就定位到想要的元素了。
5 q% q9 J, u2 @0 F2 M3 c
3 p5 ^+ b2 E1 o
8 E7 g4 H$ Z0 {9 m- o1 Z2 g
3 ]' W; W9 F, x" F9 }' `图2-18 审查元素页面4 N* Q) m: D7 Q9 \5 M* W, S9 p
步骤03 在代码中找到标蓝色的地方,为& d7 Y2 n* k# l8 _& k% y) X
0 N: }1 B7 q. N9 _
echarts学习笔记(2)–同一页面多图表。我们可以用soup.find("h1",class_="post-title").a.text.strip()提取该博文的标题。" l, S( Q# o# L ^$ D' @1 f- d0 o: @
2 {- n6 B/ @/ b1 X [
第三步:存储数据. G; v c- d! z0 e- Q0 I S0 M
" N9 L8 H4 G1 b- g- J8 }
import requests" U; q* A- B& x9 `7 v1 k5 ^& v
from bs4 import BeautifulSoup #从bs4这个库中导入BeautifulSoup
6 x; L* B% g5 d* f9 P' B5 g( i
6 T+ ~( {9 j* ?3 ?. elink = "http://www.santostang.com/") F5 F0 p8 Q* T+ B4 p% F
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'}
' O+ I& D7 j+ Q1 J; Zr = requests.get(link, headers= headers)' v- B" o S7 q. \* G$ x
8 f4 U( Q3 W% F) [5 b$ U& I7 V
soup = BeautifulSoup(r.text, "html.parser") #使用BeautifulSoup解析
2 D1 l- n0 o$ O1 jtitle = soup.find("h1", class_="post-title").a.text.strip()! z$ a8 M5 a$ a5 Q( z! r
print (title), o5 z! I. D0 j- B9 b) _ G
) {$ [2 O' N( U% o3 k
# 打开一个空白的txt,然后使用f.write写入刚刚的字符串title2 O$ \4 m+ \0 C W: \! N
with open('title_test.txt', "a+") as f:6 f; g% w+ w( D+ |5 }
f.write(title)7 C: }9 U* a5 S
1
M$ b, {2 A" s* M1 J2 L2+ P7 A7 W6 ^! A @5 \) V# u
3" [8 b5 U2 ]1 U5 m
4) _* ^9 H. t; Y7 w4 Z: w# m
5
7 ]; r' U, T( n' O6& y; y' ~: m. B& x! S
7
1 J2 w5 `4 } m' U3 w88 J$ }% X- M7 H j! y( s; s, f8 g
91 t7 q" Z* Y4 D/ ?6 l* |0 U
10& f: U/ f' c% W, C6 u( |. w- T
11
5 ~: L& N' }4 d12) `6 j/ Z$ m1 e Q" p
13( I5 O) X% {+ v$ h0 r" W5 `+ {% ]
14
$ q0 W3 \. K' b/ Z0 D# @存储到本地的txt文件非常简单,在第二步的基础上加上2行代码就可以把这个字符串保存在text中,并存储到本地。txt文件地址应该和你的Python文件放在同一个文件夹。7 z+ V: D& }& E) D2 M/ R" v/ H' }
8 z/ J* d! \/ K0 {' Y" q+ f+ b返回文件夹,打开title.txt文件,其中的内容如图2-19所示。
9 W, R8 A6 }- Z. L0 Y2 b7 {9 d1 ]7 C& A7 Z
以上内容就是本节要介绍的如何编写一个简单的爬虫的步骤,想要学更多爬虫相关的内容,可以到这本书里查哦《Python网络爬虫从入门到实践(第2版)》
$ r. C) M4 b F$ M) t
6 ~8 |0 p' A/ m4 z* Y4 d) M! D5 Q: u7 B; c) H5 l( Z
目录, h) q' `3 A; M4 k7 R
% z$ b. y0 i: n
前言: d7 E; |* \1 n/ t0 X: [# U* W" \
第1章 网络爬虫入门1$ K8 ]- ]3 a9 P2 O+ g
1.1 为什么要学网络爬虫2+ r5 _- Y! t( ?; K6 J" B
1.1.1 网络爬虫能带来什么好处2
/ ^- F @ R4 D+ b' o/ n1.1.2 能从网络上爬取什么数据38 [" b+ l( l2 r4 [; O& m/ s
1.1.3 应不应该学爬虫3
+ _9 v/ ]# x; N; N1.2 网络爬虫是否合法3% F# A* u& x8 Y v
1.2.1 Robots协议4+ e2 }2 U& i N- b1 o7 l
1.2.2 网络爬虫的约束5
# t o& K. `6 u' X6 w1.3 网络爬虫的基本议题6
/ n7 L6 [& X8 z! i w3 b. N1.3.1 Python爬虫的流程78 W( u P# g9 @3 W$ H
1.3.2 三个流程的技术实现7, I( l/ D+ ]7 y I
第2章 编写第一个网络爬虫9; i5 F P6 p+ `4 {; e
2.1 搭建Python平台10
7 ?8 {/ z5 H: q# y2.1.1 Python的安装105 B1 s6 d, t& E6 ~% d/ C' g
2.1.2 使用pip安装第三方库12+ F9 C0 `3 j, i' }% B. }3 j
2.1.3 使用编辑器Jupyter 编程13) s) s% g3 Q B1 a- y
2.1.4 使用编辑器Pycharm编程15
7 X0 V& J8 R/ b% A4 }" \4 [! [! _2.2 Python 使用入门18
' E7 O' M: s' [# Z* t! |# T0 E2.2.1 基本命令18
6 Y. m; W b' T3 D6 V( n. c2.2.2 数据类型197 Z' j% E8 k% R7 o# X
2.2.3 条件语句和循环语句21
9 b+ q/ I, [# U' T' A5 c1 x2.2.4 函数23$ ?5 `1 ^4 u: X3 L2 x8 E# x I/ X2 ^
2.2.5 面向对象编程24
% Q0 Z6 P% L( X9 A; h2.2.6 错误处理28+ }' E8 M7 ~1 ]5 Y2 H. p' N- G) ?+ o
2.3 编写第一个简单的爬虫295 S* f4 G; V5 Z9 B2 R9 g( B' z
2.3.1 第一步:获取页面295 F1 g5 p: h( O7 c! I4 i* \) Y6 \
2.3.2 第二步:提取需要的数据30
( g/ k. r" W: Q/ b) V. n+ O2.3.3 第三步:存储数据32
: j t4 M3 l) n V, w2.4 Python实践:基础巩固33) R4 U6 P! F2 X3 `8 Y
2.4.1 Python基础试题34
. N0 S& p! h9 m+ Z h ^ m2.4.2 参考答案352 ] L7 Z! u; u5 U1 H" I
2.4.3 自我实践题38
" u& g$ I8 k% }* I第3章 静态网页抓取39
6 G, Y" M6 y% R, r' B+ w1 U3 }/ `; U3.1 安装Requests40
$ p0 |) N0 X3 h" V$ y6 V( |3.2 获取响应内容409 S* H8 v7 @- Z" U& J
3.3 定制Requests41% Y* w' M# { _0 v) P$ Z9 \
3.3.1 传递URL参数41) H# d2 b& d4 Z: c9 ^
3.3.2 定制请求头428 g7 f& |# f( ?& B9 p2 n- S* ^$ [& j7 |
3.3.3 发送POST请求43% G9 k$ G: g0 Q& |( b6 w: L
3.3.4 超时44
$ D8 ^( [/ v/ a% D# Y X3.4 Requests爬虫实践:TOP250电影数据44& L7 g# R2 M. i2 }. [) k4 U
3.4.1 网站分析45
! \$ B9 T1 f4 |% p q% h: l9 i' S3.4.2 项目实践45. K7 u% o- l0 r8 F1 ?! f# v* l
3.4.3 自我实践题47; n& d1 l6 S' C0 _5 J
第4章 动态网页抓取48
3 o& m5 _! `. i5 p4.1 动态抓取的实例49
0 z7 L6 Q- p5 }4 y* z0 F4.2 解析真实地址抓取50
3 I; A& w$ x z2 ^+ D8 n. o4.3 通过Selenium模拟浏览器抓取55
1 O4 e7 F& i1 }' Q2 T" B4.3.1 Selenium的安装与基本介绍55" B2 X, K! r! j$ n' l" L
4.3.2 Selenium的实践案例57
" Q; s" O9 e. F1 a6 ~+ m4.3.3 Selenium获取文章的所有评论58; j9 l" r `6 L* a, J5 w) o) ~
4.3.4 Selenium的高级操作61* e7 z# u4 I% y6 _. X
4.4 Selenium爬虫实践:深圳短租数据64
/ K) V+ T# W) g( e& R# q2 e4.4.1 网站分析64
+ ^8 m% g& a1 ?) t2 P) K5 ?4.4.2 项目实践66
4 M' z+ i) {3 ?4.4.3 自我实践题69
) p8 H- L0 L, n4 F3 a第5章 解析网页70
) X, s1 M" Q6 a5 a9 v: s5.1 使用正则表达式解析网页71
" V' I) T! H9 W# J) b7 O5.1.1 re.match方法71- S) H2 k0 d" q/ I9 P; g& Y
5.1.2 re.search方法74
0 e2 ~3 \9 p% h, f; b& M5.1.3 re.findall方法74
2 j' Z% h, m' `3 E5.2 使用BeautifulSoup解析网页76
) C" G7 `( |, y* N F5.2.1 BeautifulSoup的安装760 a" O6 Q, U7 E8 K; t
5.2.2 使用BeautifulSoup获取博客标题77
9 j2 K- S- J" R# G5.2.3 BeautifulSoup的其他功能78( C- ^3 E H# F c3 c" |" x
5.3 使用lxml解析网页826 [& T5 ?* A9 B: N
5.3.1 lxml的安装82
, F* e* e( }" `, m* D) p9 R+ {5.3.2 使用lxml获取博客标题82/ G2 W2 C' R r+ `8 N* X% e
5.3.3 XPath的选取方法84
' U0 I6 ^8 z( u( ]) [5.4 总结85
& D+ |' ^- `9 Q. m/ E5.5 BeautifulSoup爬虫实践:房屋价格数据86
) }" L6 j$ d) e9 t5 l5.5.1 网站分析86( y* e4 E( R) g( q
5.5.2 项目实践877 m- M2 a8 B# L2 Q2 {
5.5.3 自我实践题89
5 a/ E9 r9 ^; E9 M第6章 数据存储90
! @1 N. l3 F1 c6.1 基本存储:存储至TXT或CSV91
2 a: d% ?7 ~* Z \3 [( S5 [2 N6.1.1 把数据存储至TXT91% K6 [/ Z5 W& r, \
6.1.2 把数据存储至CSV93
2 p+ b/ s% i( F7 v0 g6.2 存储至MySQL数据库94
7 ? z% u# [+ @3 J. K6.2.1 下载安装MySQL95. ^# A1 p4 V M8 C* z; ]7 C
6.2.2 MySQL的基本操作993 r* q# B$ h4 Q- F6 U( p
6.2.3 Python操作MySQL数据库104
, D* M* ]4 v7 Y5 ?, o6.3 存储至MongoDB数据库106% y) }1 w* r) w$ e
6.3.1 下载安装MongoDB107
9 z' B# V* D# G3 j+ L9 E G# n& [6.3.2 MongoDB的基本概念110
) \$ v4 ?1 Q( X) f: C+ e* _3 g6.3.3 Python操作MongoDB数据库112
; s0 e2 F0 ^' r3 j3 ?7 I( @6.3.4 RoboMongo的安装与使用1132 p: o5 c1 h7 N" a# f5 `0 _
6.4 总结1154 x6 f$ h# x/ N# N$ G! w
6.5 MongoDB爬虫实践:虎扑论坛116
8 a7 v" v( r. n% s6.5.1 网站分析116# p1 s5 ]2 m' V" j! L/ n5 {# j
6.5.2 项目实践117% }2 s( }8 t5 R' Y4 g
6.5.3 自我实践题123
; b. Q5 `1 V3 e5 [$ O第7章 Scrapy框架124
, R5 x* K. T# C+ x& G& C v5 _6 C# r7.1 Scrapy是什么125
7 s C6 N2 L f8 B& o* p7.1.1 Scrapy架构125" M4 l3 Q( z/ r' U% m& [6 e
7.1.2 Scrapy数据流(Data Flow)126
* q$ [$ @! N7 m+ h) J7.1.3 选择Scrapy还是Requests+bs4127$ S7 u7 A+ R1 ~* H. z5 }1 ]" p- f
7.2 安装Scrapy1284 Y9 G! {5 H& b
7.3 通过Scrapy抓取博客128
/ V& F8 L* X( ?# B7.3.1 创建一个Scrapy项目128
$ p$ f. l. U5 o/ J) E4 G" q5 D: U7.3.2 获取博客网页并保存129
9 y3 m. `7 {1 Z z6 ]$ s7.3.3 提取博客标题和链接数据131
1 P) Q7 o3 ?" V2 ]7.3.4 存储博客标题和链接数据133, r: n( y8 p8 D( n
7.3.5 获取文章内容134% R2 }2 y& r! [6 A& Y
7.3.6 Scrapy的设置文件136* Q+ }! v7 C# m e9 x2 A' S
7.4 Scrapy爬虫实践:财经新闻数据137
' b0 i! z7 V1 ^8 W2 d7.4.1 网站分析1375 K7 S+ ]9 d, O3 {( a% {" b
7.4.2 项目实践138
: @/ G6 J# v+ j7.4.3 自我实践题1418 ?8 p: d1 u) p# J
第8章 提升爬虫的速度142
& d8 J' j3 `: x* F+ a8.1 并发和并行,同步和异步143
3 F: N. z, {' b2 z7 A0 s2 B6 m8.1.1 并发和并行143
. `& B! n' k. E, A ]8.1.2 同步和异步143
K6 a9 f1 H% w# j) u4 b6 B8.2 多线程爬虫144
' }' ^4 O: J, j9 y- c4 e6 N8.2.1 简单的单线程爬虫145% C" x) m, N1 I) [8 E
8.2.2 学习Python多线程145# t" \' O5 }6 ] }+ f
8.2.3 简单的多线程爬虫148- i8 _' |+ E2 M+ _' Y
8.2.4 使用Queue的多线程爬虫150
. X1 n9 w; s% ^7 r8 X* l8.3 多进程爬虫153" e; [+ w5 R: t6 T4 ]+ C/ g) i5 B
8.3.1 使用multiprocessing的多进程爬虫153
( ~! w" t I% v8 ^5 P3 R' Z8.3.2 使用Pool + Queue的多进程爬虫155; O, r, F7 U' n; e
8.4 多协程爬虫158
, e; D$ N$ }* s8.5 总结160, A' C9 w' E( r9 w/ {6 y
第9章 反爬虫问题163( x8 Z- h! K: S( v
9.1 为什么会被反爬虫1641 i- U! s0 [( }) P5 B
9.2 反爬虫的方式有哪些164& V) [0 |1 O- T/ L
9.2.1 不返回网页1652 h' n" K [) R# S. `2 W7 p
9.2.2 返回非目标网页165
; m$ }2 N( I! g1 s. b% b: ?8 o9.2.3 获取数据变难166
: k2 q3 l P# N0 ?, r9.3 如何“反反爬虫”167" e+ ^& [ E, b: F2 I6 k5 H
9.3.1 修改请求头167
" I; P8 M) V+ d# e$ k* H9.3.2 修改爬虫的间隔时间168* l! {5 e% t F
9.3.3 使用代理171
! n+ w0 ~. Y* D9.3.4 更换IP地址172, B; w3 R- o: t5 Y Y/ x! e
9.3.5 登录获取数据172
- W" A6 W# K; T. ^6 ^. I+ J9.4 总结172
3 S& y, N# [6 o2 T' _: Y8 x第10章 解决中文乱码173% \9 w4 Z$ V d7 i% G" ?
10.1 什么是字符编码174
( ?" T! A8 z& S4 f! f( a( `7 T10.2 Python的字符编码176* k g' A* H3 a* z$ M% s/ k
10.3 解决中文编码问题179
, P. x- ^8 c( o& |& s: K' w10.3.1 问题1:获取网站的中文显示乱码179
, O! Z1 _% B7 T/ Q! f$ x& E10.3.2 问题2:非法字符抛出异常1801 f4 j! h: O- K3 Z! T0 L. h6 Z
10.3.3 问题3:网页使用gzip压缩1811 T8 p Y' C, S& Y: Z
10.3.4 问题4:读写文件的中文乱码1823 ?4 v3 e. R' F* y p* X
10.4 总结184
+ T# A, | M( ?& M第11章 登录与验证码处理185
5 q% |5 q D% ]7 H& f11.1 处理登录表单1860 M" B( P6 n. ?0 j8 l# K6 N% d$ c$ b
11.1.1 处理登录表单186
- n! Z7 l1 o6 [! U) D4 ~7 g# E11.1.2 处理cookies,让网页记住你的登录190& K" P* k9 K5 o3 |0 I
11.1.3 完整的登录代码193$ P" {! X& b$ ?+ y
11.2 验证码的处理194' r: ] g" ~3 }6 r/ @
11.2.1 如何使用验证码验证1958 D) A2 g3 a7 s- e9 I$ @" A
11.2.2 人工方法处理验证码197
: g: P' J; q; w; U& M11.2.3 OCR处理验证码200
3 X( v! s+ E$ K1 [5 R11.3 总结203
$ F4 A& f& K# J* w* s1 X5 y( }第12章 服务器采集204
2 |1 X9 l: N' ]5 @+ a& [, I: r% p8 @* L
此书已加入到VIP会员卡,只要购买VIP会员卡即可免费阅读上百本电子书,这张VIP卡除了免费让你读书,还有更多的权益等你来领,往下↓拉
( k7 @ V( q9 A( q
9 q* k3 x) D- N# ?3 a6 ?
: ]7 e: k: @8 d3 D阅读电子书的方法如下: k7 \4 a4 R1 \$ f# x" z) u
7 E4 H7 X2 W" G, j; e$ e& Q( ~打开CSDN APP(软件商城搜索“CSDN”即可找到哦)—>登录CSDN账号—>学习—>电子书
5 b* ]7 N6 M$ E9 ]
8 y- U4 i6 M- \6 \" T- M5 ?( ^% Z }
————————————————
8 L7 m5 _- c: i$ ^- ]版权声明:本文为CSDN博主「好书精选」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
% h5 W1 N( b9 r/ s) H& d原文链接:https://blog.csdn.net/weixin_37649168/article/details/1042653886 j, G7 z1 u: I; {$ [5 e- F6 {
: c( n6 B$ {! T0 n: m; n( Q
9 K1 Q3 j, b; \ |
zan
|