数学建模社区-数学中国
标题:
教你如何编写第一个简单的爬虫
[打印本页]
作者:
杨利霞
时间:
2020-4-13 16:23
标题:
教你如何编写第一个简单的爬虫
教你如何编写第一个简单的爬虫
: `0 ]) A; p) O7 i9 {0 m
很多人知道爬虫,也很想利用爬虫去爬取自己想要的数据,那么爬虫到底怎么用呢?今天就教大家编写一个简单的爬虫。
" P$ k% O- Y Y/ k: [! R
& {5 t2 k, H2 @
下面以爬取笔者的个人博客网站为例获取第一篇文章的标题名称,教大家学会一个简单的爬虫。
' Y( u7 D8 u% p1 u6 D
* U1 C( i* D3 e0 G/ j
第一步:获取页面
- B ]( t, F) r* V! o
& ~& y) N' S/ d7 k" T$ d/ p [
#!/usr/bin/python
- A8 L8 d0 E$ C& H7 p4 g
# coding: utf-8
$ I+ ]0 y5 G" X: y/ p* `
- _5 k, Z {4 _" D5 Q5 r
import requests #引入包requests
9 P( J" c6 G' o: l$ H) q
link = "http://www.santostang.com/" #定义link为目标网页地址
: I1 {0 Q5 z9 R5 J
# 定义请求头的浏览器代理,伪装成浏览器
$ n. o9 e$ ~# p) b: H# O! j
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'}
2 E6 g9 P) }, G8 U# D% a
5 ~1 H5 z: `8 ?
r = requests.get(link, headers= headers) #请求网页
2 Z* a" s; o) z5 ^& p j& m
print (r.text) #r.text是获取的网页内容代码
& S* r2 m: F# `7 }# ]( r- @
1
: C/ i! A7 t- ]& v! o
2
8 A8 n, @1 j) W4 L& C
3
, T6 o8 u2 e& L& \1 ~* `( H2 ?9 X
4
2 W+ ^9 m9 w2 C) M1 d) p
5
& \6 m0 k5 x# f
6
6 W! C/ X, [% N% o' C- e
7
% ?4 {. J V4 Y1 B8 C
8
@# T& z1 q. a+ a: [$ ?+ ?7 T, V
9
2 k. N4 p, ` T
10
+ t" H1 T- x' J
上述代码就能获取博客首页的HTML代码,HTML是用来描述网页的一种语言,也就是说网页呈现的内容背后都是HTML代码。如果你对HTML不熟悉的话,可以先去w3school(http://www.w3school.com.cn/html/index.asp)学习一下,大概花上几个小时就可以了解HTML。
1 n& ~: c$ ], S+ k) C, N
- B" \! @. p6 C; v& W
在上述代码中,首先import requests引入包requests,之后获取网页。
* j4 Y5 k' O% b# K y! `
. @0 n5 ~1 d# C# S* J
(1)首先定义link为目标网页地址。
0 ^# C6 H( I3 a: I: Z8 h7 n( V
% c7 z8 [6 H6 m# ]
(2)之后用headers来定义请求头的浏览器代理,进行伪装
. s2 i* R" F: |: ?: P% V
( p) F+ _" j3 _$ T; N, O) {
(3)r是requests的Response回复对象,我们从中可以获取想要的信息。r.text是获取的网页内容代码。
5 z! H! {# e9 G- L0 ~ K
2 ^' U- ^- e+ H" Z/ `5 w
运行上述代码得到的结果如图所示。
; d1 j+ _, Y# W0 ]
7 l" g# r. t- {0 j0 X6 u
9 a0 J" P/ e- i( r
第二步:提取需要的数据
% G2 n% I/ O5 W+ |
: |( F* e; a `2 l2 q& j
#!/usr/bin/python
4 R( I; ]+ [: v7 D
# coding: utf-8
/ q- X. T, w7 v- B, h- u0 I6 P
9 Y) ~* a. X7 A+ s* ~
import requests
7 F2 Y* V( ?; r, k( b
from bs4 import BeautifulSoup #从bs4这个库中导入BeautifulSoup
; @ r$ n$ _: S6 f* Y$ d* }) ^2 i0 ]
3 p( Y& `8 u0 m2 n) H {" H$ d
link = "http://www.santostang.com/"
1 u4 x Z. t2 _8 h
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'}
5 T- N, x( I- Z' ^
r = requests.get(link, headers= headers)
( O4 E. m2 C; I# E/ U
1 R$ ]. n- |( l0 w
soup = BeautifulSoup(r.text, "html.parser") #使用BeautifulSoup解析
( z: Z& j: m4 n, P3 x
9 |8 _& A! d$ ?2 |* z; j
#找到第一篇文章标题,定位到class是"post-title"的h1元素,提取a,提取a里面的字符串,strip()去除左右空格
. ?, d1 K6 c- V
title = soup.find("h1", class_="post-title").a.text.strip()
" P1 t; @0 o/ G5 c! k+ C
print (title)
: a/ v9 I% B# V& D
1
- P1 G) b4 ]; G: c' x! r! d! r- r
2
' B( D7 d% ?3 C# S0 K
3
* I% G6 Z" a5 [
4
/ Y3 I o* r1 F: c/ C
5
; v. o1 o* m' j0 S. q2 u& n& d" x. W
6
) W& R& N: F" q0 N1 g
7
4 f+ } i& [% x( e
8
$ y% |! ~% R+ C" m8 r, ~
9
# a7 q+ L. m& h: k
10
( ~( J% B/ W: W( d
11
, x! d: H* z( \
12
! ?1 z) B/ x7 g8 v% Y
13
: Z1 D! g0 J f2 ^- L1 p0 k, `& m
14
6 s/ @9 o4 p ~* | W$ R
15
m, t* m1 F- D/ Y2 X0 m
在获取整个页面的HTML代码后,我们需要从整个网页中提取第一篇文章的标题。
; X' S; m1 P3 {9 M P
' Z% b5 W7 s+ v4 L
这里用到BeautifulSoup这个库对页面进行解析,BeautifulSoup将会在第4章进行详细讲解。首先需要导入这个库,然后把HTML代码转化为soup对象,接下来用soup.find(“h1”,class_=“post-title”).a.text.strip()得到第一篇文章的标题,并且打印出来
! I- i9 t$ U, f
7 ~9 o& `7 w& b/ ]* D/ r
soup.find(“h1”,class_=“post-title”).a.text.strip()的意思是,找到第一篇文章标题,定位到class是"post-title"的h1元素,提取a元素,提取a元素里面的字符串,strip()去除左右空格。
/ {, Z8 B1 J& H# X
" ~0 V$ b8 X8 v3 ? l0 |
对初学者来说,使用BeautifulSoup从网页中提取需要的数据更加简单易用。
4 @* N* Q* ?2 Y1 J9 [/ p" P
2 X) z: A y& c: G' E" p: q2 F
那么,我们怎么从那么长的代码中准确找到标题的位置呢?
6 U$ {' w2 G3 J% c0 R
4 h0 ~7 P0 h* h! \
这里就要隆重介绍Chrome浏览器的“检查(审查元素)”功能了。下面介绍找到需要元素的步骤。
. k6 j$ k6 R8 G V2 D
6 T, T' b5 u: [# j
步骤01 使用Chrome浏览器打开博客首页www.santostang.com。右击网页页面,在弹出的快捷菜单中单击“检查”命令,如图2-17所示。
$ V% r: e; y* ]) h( f' W/ N
( v8 T4 d2 h5 a& L# p
4 ]9 S0 N/ |0 @1 R, |
, _" Y5 S% ]. V/ d& H, T0 \$ m
步骤02 出现如图2-18所示的审查元素页面。单击左上角的鼠标键按钮,然后在页面上单击想要的数据,下面的Elements会出现相应的code所在的地方,就定位到想要的元素了。
6 S ~2 O; a) m$ s
3 o7 |4 c1 e+ Q1 r. e8 b
( z# r. F9 _0 ^8 x& g* L4 _9 X$ V) U
# e9 N3 ~ r" Z
图2-18 审查元素页面
l, }. L) z* F3 m; O0 D
步骤03 在代码中找到标蓝色的地方,为
3 D5 Q5 _3 }8 W) g4 K
* D% G& f! [2 v& v. c
echarts学习笔记(2)–同一页面多图表。我们可以用soup.find("h1",class_="post-title").a.text.strip()提取该博文的标题。
+ \& G$ g3 h1 A+ U4 m& H
6 U* Q$ ]5 d+ w" G9 Y
第三步:存储数据
: Y# x0 B; |9 f2 C8 r* n
! h% n/ o& a& S8 G* J* Z1 q
import requests
1 R; K# _' v) x
from bs4 import BeautifulSoup #从bs4这个库中导入BeautifulSoup
( D. h2 @2 j8 E
/ k: r( W: d% W* m
link = "http://www.santostang.com/"
5 B& M! s8 ?: Z' Y* O; \! X" J
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'}
4 y' n1 c3 [8 N* r* A: I( D3 F3 _* ~& n
r = requests.get(link, headers= headers)
% L" A, t/ D2 k! s! b# F
+ k' u3 `! T4 o" a5 j; c. m4 ^2 w6 V
soup = BeautifulSoup(r.text, "html.parser") #使用BeautifulSoup解析
- ]! j# A/ N3 _( J. t2 x
title = soup.find("h1", class_="post-title").a.text.strip()
+ U1 A' }9 A9 h- g! a
print (title)
% Q- F/ @' l. y5 U! W
' q8 q; W' @$ R! F9 D
# 打开一个空白的txt,然后使用f.write写入刚刚的字符串title
5 V" v$ b& T3 z, J- K- v9 s
with open('title_test.txt', "a+") as f:
% [. d2 T' `4 n# M: b! K4 K* f1 w
f.write(title)
7 T/ E6 J9 q/ ?) z
1
. c$ B) {( h" a$ E
2
2 m/ k* h6 [, q" A( M! |3 U
3
3 ~+ I( s+ P. \* J
4
Q* c. k% o: G0 U, y0 U
5
! e1 G1 |, e Z6 Z4 d% S' ]
6
' Z6 ?/ z6 o/ q0 m% N. y
7
, P( e3 z% d+ @$ u9 z9 ^
8
* t' s5 s4 M# B. r7 E4 Q m
9
2 t6 n, R1 L/ E- |) X2 R$ w9 D
10
) n/ @/ q+ L! b( t
11
5 | T3 p4 W! O: E2 a* C
12
4 I# I$ v; }) x! U; U& f$ f E' O
13
' k+ D7 I9 A" g ?" A2 e
14
9 D+ I# {" E4 T# o/ M6 y/ W
存储到本地的txt文件非常简单,在第二步的基础上加上2行代码就可以把这个字符串保存在text中,并存储到本地。txt文件地址应该和你的Python文件放在同一个文件夹。
, E8 c* U- l: s9 B. e3 x
; v, q8 i4 t! ~0 M$ S" o
返回文件夹,打开title.txt文件,其中的内容如图2-19所示。
( T0 P: ]4 J2 d* G
$ [ B/ O8 B! ~' a# M7 j, z- S
以上内容就是本节要介绍的如何编写一个简单的爬虫的步骤,想要学更多爬虫相关的内容,可以到这本书里查哦《Python网络爬虫从入门到实践(第2版)》
9 g& ]/ W" ?1 f1 S
* a- j! }- w! l9 J5 D& j5 B' o
7 p' o- f4 Q& L. g
目录
P. a+ r6 r. Q8 k
. Q+ X9 [2 K& m* b! y' u
前言
4 V) ~' z- b- Y
第1章 网络爬虫入门1
& }7 ~& S' s8 {1 h
1.1 为什么要学网络爬虫2
2 L( M3 e9 K* E+ k
1.1.1 网络爬虫能带来什么好处2
2 u% R! {7 D% n) B) P. m
1.1.2 能从网络上爬取什么数据3
7 B( _" U9 N+ z& [8 f4 O
1.1.3 应不应该学爬虫3
: @9 Y$ @$ i1 c! g! E* _
1.2 网络爬虫是否合法3
0 s3 L5 k& V3 H( j8 h, r# {
1.2.1 Robots协议4
' k' N' |/ ^$ ~9 O3 U
1.2.2 网络爬虫的约束5
. U! ~' _5 O; p* ~4 F k
1.3 网络爬虫的基本议题6
' g8 ]: B: n( \; A
1.3.1 Python爬虫的流程7
M4 ^ k/ ^3 m$ ]6 D
1.3.2 三个流程的技术实现7
5 ]/ F7 a8 r1 b y7 x- H' y' F
第2章 编写第一个网络爬虫9
9 d7 a6 A( S+ x" ?
2.1 搭建Python平台10
# u7 e. V4 O+ y( N s
2.1.1 Python的安装10
; \! W V9 ]% K/ r4 a8 A/ W
2.1.2 使用pip安装第三方库12
. u4 E4 @6 `4 \7 [2 J
2.1.3 使用编辑器Jupyter 编程13
. Q. t5 L: E$ Y: ^ z" ^! _
2.1.4 使用编辑器Pycharm编程15
2 r) n. E% L$ U. X* O
2.2 Python 使用入门18
O, ^; g2 v# p4 i2 C5 j
2.2.1 基本命令18
, P1 `! _% ~, i# H, z
2.2.2 数据类型19
- b& ?0 V. o/ P; n# Y
2.2.3 条件语句和循环语句21
( P$ E( {/ U: r' ^0 B' o
2.2.4 函数23
4 U( q& Y7 _! N$ `$ W4 S
2.2.5 面向对象编程24
8 |" h! E( j1 R! B
2.2.6 错误处理28
% o+ ]: s' G0 K# B
2.3 编写第一个简单的爬虫29
" Q4 O( g9 q9 W8 \
2.3.1 第一步:获取页面29
* C4 J+ s1 S/ \5 V
2.3.2 第二步:提取需要的数据30
6 T" N- k3 o. s% K
2.3.3 第三步:存储数据32
$ \$ ~; O; p5 I9 b* p
2.4 Python实践:基础巩固33
" T( @0 ]% |6 H. V) S7 z; R
2.4.1 Python基础试题34
0 b4 F" h) B9 D5 N+ Y! U9 ]
2.4.2 参考答案35
5 ^: U2 J4 s- T1 s$ ^/ D
2.4.3 自我实践题38
2 z0 E8 I: h% h: [$ w% J0 K
第3章 静态网页抓取39
# ?9 M; j" j3 W* |% @1 F2 I
3.1 安装Requests40
# z: ]9 y( B0 n u6 Y
3.2 获取响应内容40
7 z) g/ m8 V, S9 {' M, i" _
3.3 定制Requests41
9 b3 Y% K* e# A; S; l+ @
3.3.1 传递URL参数41
8 E J4 @$ l* l8 [! K0 J
3.3.2 定制请求头42
' U4 X- p0 P6 C+ Y
3.3.3 发送POST请求43
$ Y3 j; n' f! a- f
3.3.4 超时44
0 }8 {3 N2 I5 Y( f! _6 T
3.4 Requests爬虫实践:TOP250电影数据44
' }" W# t6 M6 g% O: h& {
3.4.1 网站分析45
" G! U5 y2 b( C# h7 t( j4 g
3.4.2 项目实践45
& d0 u; G) z' y9 S) ^; ]
3.4.3 自我实践题47
" ?7 y+ a% a. a( p
第4章 动态网页抓取48
$ ^# p, W9 m# e1 p; [& M6 B% ^) t
4.1 动态抓取的实例49
) o1 |& Y4 }9 m P1 H, b
4.2 解析真实地址抓取50
6 n' _1 p' o% ~0 h- Y* O
4.3 通过Selenium模拟浏览器抓取55
! G: h p' e7 J( \- \8 C. b _- W
4.3.1 Selenium的安装与基本介绍55
. a) {5 |! |' K
4.3.2 Selenium的实践案例57
, K+ S3 c; e- J0 w" D* P
4.3.3 Selenium获取文章的所有评论58
0 A" U5 m7 e! o. d
4.3.4 Selenium的高级操作61
3 |/ f: b2 c* y0 L/ _2 O% H, E
4.4 Selenium爬虫实践:深圳短租数据64
/ G0 w1 w/ `' Z! u. v
4.4.1 网站分析64
/ W( S3 x1 r) _
4.4.2 项目实践66
5 I% i9 L0 H8 i, \& f1 O Z3 p
4.4.3 自我实践题69
! ?) n4 O' ~; E* r! d
第5章 解析网页70
" c- L. J! H, @& N; S6 y
5.1 使用正则表达式解析网页71
! S+ P$ z6 Q$ |2 Q: l H
5.1.1 re.match方法71
/ U: T9 a% v0 y7 b& g$ T
5.1.2 re.search方法74
" }5 y9 t" P7 x& @2 ~
5.1.3 re.findall方法74
i( W3 @2 a2 x7 v F# \3 M
5.2 使用BeautifulSoup解析网页76
3 v$ Y: [6 Q1 O) c/ Y
5.2.1 BeautifulSoup的安装76
C- Z* B8 m; c8 E1 E
5.2.2 使用BeautifulSoup获取博客标题77
/ n( |& x( P. u' k) @2 r2 _
5.2.3 BeautifulSoup的其他功能78
1 d3 j) Q. o, ~! ~8 c- _
5.3 使用lxml解析网页82
4 [7 q: n# ?- ^( W1 `) Y7 y7 r
5.3.1 lxml的安装82
2 U+ L7 x- A; s n, e
5.3.2 使用lxml获取博客标题82
- Q7 c6 Z @6 {; E0 _% b
5.3.3 XPath的选取方法84
6 B, F! Q' i9 P' @' F( @
5.4 总结85
- C% j {8 K% y, Q9 l
5.5 BeautifulSoup爬虫实践:房屋价格数据86
* U8 i- z# B' N; Y$ A% B: O
5.5.1 网站分析86
/ X5 E( `) o# A; Z
5.5.2 项目实践87
, }: K4 m8 j+ r3 s7 j
5.5.3 自我实践题89
3 i9 e0 L5 r# d& I# l8 F$ I: B
第6章 数据存储90
/ k7 v. X; X% ~& m) O) |* A c
6.1 基本存储:存储至TXT或CSV91
" B' I9 B, F' t8 e# k1 e0 w6 a
6.1.1 把数据存储至TXT91
3 N, j7 z+ v: b+ U7 W! f. n+ T
6.1.2 把数据存储至CSV93
8 c" s0 K0 a9 X# G3 T+ K
6.2 存储至MySQL数据库94
8 i" S) L$ C1 k0 l
6.2.1 下载安装MySQL95
% ~+ _: d% r# [6 t7 m7 ~1 Q& `
6.2.2 MySQL的基本操作99
$ O3 H# v; E7 m5 D5 n7 a: @
6.2.3 Python操作MySQL数据库104
' d$ J/ i J; g7 g8 s' N. l( J5 F `
6.3 存储至MongoDB数据库106
$ }4 {6 R) ? K! {+ D- N
6.3.1 下载安装MongoDB107
: P; o3 } A9 H$ X& C
6.3.2 MongoDB的基本概念110
1 i# P& S7 p& d) q: k! k
6.3.3 Python操作MongoDB数据库112
+ n. j3 ]& u$ V: x, Y7 v
6.3.4 RoboMongo的安装与使用113
4 E4 ?; B& K. G+ X" B0 M$ ?
6.4 总结115
7 z/ @0 F: ^% E: l4 _
6.5 MongoDB爬虫实践:虎扑论坛116
' K7 d; B. W! s9 l! r V/ o+ A
6.5.1 网站分析116
1 s+ @8 a7 l1 l
6.5.2 项目实践117
5 g4 D+ A. m, w4 A
6.5.3 自我实践题123
/ q3 I$ m- l( S+ g& `+ ^& O+ x
第7章 Scrapy框架124
% s7 c1 D' W! |+ H& B, c2 T
7.1 Scrapy是什么125
5 ^1 r" m. v4 Y$ z6 r
7.1.1 Scrapy架构125
8 V& r) I. }+ V1 K) F
7.1.2 Scrapy数据流(Data Flow)126
/ y( q( U# i7 h& ^
7.1.3 选择Scrapy还是Requests+bs4127
5 \5 G/ c" u: N. i, T7 ?
7.2 安装Scrapy128
% d8 Y4 S1 O' l, X6 B* g! E5 j
7.3 通过Scrapy抓取博客128
/ H Q& g* N; Y' R. h) g9 S
7.3.1 创建一个Scrapy项目128
8 g- o4 j }8 b5 V
7.3.2 获取博客网页并保存129
5 ~. U6 [- P) t2 p7 U" f
7.3.3 提取博客标题和链接数据131
& L8 g" W- C0 [/ a9 }
7.3.4 存储博客标题和链接数据133
8 W6 N3 u* C# Q0 K# `, E4 t3 K" y
7.3.5 获取文章内容134
5 v6 J Z" d$ h
7.3.6 Scrapy的设置文件136
- m0 u2 v- s9 I) L! d5 X. F
7.4 Scrapy爬虫实践:财经新闻数据137
; F2 r* `+ i D) ~
7.4.1 网站分析137
& M8 @2 L$ ?) E+ T+ y/ [
7.4.2 项目实践138
3 q& N% d, Z: L. u9 K
7.4.3 自我实践题141
( ~- W0 O$ E0 t j" t; p; @& Y
第8章 提升爬虫的速度142
! p4 x& V" r& T9 ~) @1 d) C
8.1 并发和并行,同步和异步143
! ?$ f V) K) M6 m! D! O B% m! p ^
8.1.1 并发和并行143
+ Q% N/ \5 S( o' m8 ]( J0 ?) y
8.1.2 同步和异步143
6 a- |1 B) y4 ?0 L
8.2 多线程爬虫144
3 X1 k* ~1 G" }. \% i8 v' r7 i4 d
8.2.1 简单的单线程爬虫145
6 r# x+ c. b" @6 x
8.2.2 学习Python多线程145
% P9 J, d0 T. c4 j( }+ m) K
8.2.3 简单的多线程爬虫148
" T9 B% R7 q- S1 |! x) A# A, V
8.2.4 使用Queue的多线程爬虫150
; C) H! s* F8 q4 A6 W# X
8.3 多进程爬虫153
. x9 e" S9 y7 E
8.3.1 使用multiprocessing的多进程爬虫153
& ?. M2 t8 t) V
8.3.2 使用Pool + Queue的多进程爬虫155
$ h$ u& P7 a" R/ T& j* [
8.4 多协程爬虫158
+ ^, [. k; P# Q6 ?& L2 i
8.5 总结160
& O: c n5 C1 t* Y4 w3 k: |& L
第9章 反爬虫问题163
' N9 ?* |8 b! g* ^; j
9.1 为什么会被反爬虫164
* e! P. M4 x; R, }* }
9.2 反爬虫的方式有哪些164
/ s3 y- ^0 S. }+ j
9.2.1 不返回网页165
! J/ V" X) [; P' H+ `- E1 Z' U( ~
9.2.2 返回非目标网页165
. a5 g: o! a0 ]4 M% Q6 \9 S. c3 t- f
9.2.3 获取数据变难166
1 q% n; q* y- k1 Y% I& T3 G- |
9.3 如何“反反爬虫”167
# S1 Y" f# |2 }2 E% G3 ]
9.3.1 修改请求头167
" N3 ~& Z: a4 v/ C6 D9 y
9.3.2 修改爬虫的间隔时间168
7 v5 F% t- @+ ]2 K$ ]) E( ^9 ^
9.3.3 使用代理171
! ^) @/ ]3 {3 s; p$ v
9.3.4 更换IP地址172
! O6 K F( A" {8 L* j2 D6 L
9.3.5 登录获取数据172
' W' l% y- e7 Z8 w% m- h# S
9.4 总结172
/ j( L0 h2 L3 w0 \4 q
第10章 解决中文乱码173
& X+ N6 b6 l p4 M
10.1 什么是字符编码174
( w9 D2 p4 V6 p; E3 t
10.2 Python的字符编码176
2 P& z7 I& a5 g
10.3 解决中文编码问题179
! m5 f: D: s I* M7 e' z
10.3.1 问题1:获取网站的中文显示乱码179
5 U6 P) H# D$ ~1 t
10.3.2 问题2:非法字符抛出异常180
5 [; W' d9 N$ H9 y& `9 Q; w7 t8 v: Y7 M
10.3.3 问题3:网页使用gzip压缩181
3 f" [3 b6 }- ]8 p* }+ g
10.3.4 问题4:读写文件的中文乱码182
8 z3 Z ?' w: X
10.4 总结184
% p6 C2 N' m9 f1 j; Z) p) U% I
第11章 登录与验证码处理185
1 B. @7 V7 Q3 ^- \/ z: t/ p- s
11.1 处理登录表单186
3 k& @ s; i3 o# r3 W) o
11.1.1 处理登录表单186
8 V- T- Z) i( |0 s
11.1.2 处理cookies,让网页记住你的登录190
6 W8 `+ Q9 D5 ?; F; Z9 d
11.1.3 完整的登录代码193
! v: b, j& [: F. R4 y; Y5 I* l
11.2 验证码的处理194
) @% U" T: D& q2 p
11.2.1 如何使用验证码验证195
% Z9 f8 M) O3 H
11.2.2 人工方法处理验证码197
1 v _8 U& U3 \0 I V
11.2.3 OCR处理验证码200
) a& |8 }7 m. }5 i! M2 z
11.3 总结203
+ n# B3 d: C# k/ N
第12章 服务器采集204
0 B' u8 }3 {6 }- q, W& v
" c0 W+ p5 l' ^% a; Q- }% z( \/ c
此书已加入到VIP会员卡,只要购买VIP会员卡即可免费阅读上百本电子书,这张VIP卡除了免费让你读书,还有更多的权益等你来领,往下↓拉
4 Y) J( _( K% t4 W2 U
) H- ^5 p3 T' [1 f+ }* k" d
* l4 n" r: a5 M0 m9 U3 W
阅读电子书的方法如下:
8 B4 y' g: `* u
5 C9 c: V6 Y3 X: H. n) i3 m
打开CSDN APP(软件商城搜索“CSDN”即可找到哦)—>登录CSDN账号—>学习—>电子书
( G3 q4 `7 j0 ^ F0 T" s3 I0 L
* X* [- K$ Q6 {: |$ ^
5 p7 q/ E+ _% Q4 S
————————————————
2 w, _) z3 E7 e
版权声明:本文为CSDN博主「好书精选」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
3 B5 T& Z/ P! d7 R" a
原文链接:https://blog.csdn.net/weixin_37649168/article/details/104265388
* u! u1 y6 `; }, L' m
$ I4 `( @( a! S) X
, Z& Y$ c: `1 {3 I1 T
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5