一个爬虫的五脏六腑(从入门到入狱)

一个爬虫的五脏六腑(从入门到入狱)

  • 1.网络爬虫概念
  • 2.爬虫爬取数据的用途
  • 3.http概念
  • 4.常见http请求头
  • 5.请求方式
  • 6. 响应状态码
  • 6.urllib库
  • 7.正则表达式
  • 8.Xpath和lxml库
  • 9.requests库的使用
  • 10.理解json以及python的json库的使用
  • 11.scrapy框架

1.网络爬虫概念

网络爬虫就是模拟客户端(浏览器)发送网络请求,获取响应,并按照自定义的规则提取数据的程序,简单来说,就是发送与浏览器一样的请求,获取与浏览器所获取的一样的数据。

2.爬虫爬取数据的用途

爬虫爬取的数据最常应用于两个方面数据展现和数据分析

3.http概念

http是一个简单的请求-响应协议,它通常运行在TCP之上。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。请求和响应消息的头以ASCII码形式给出;而消息内容则具有一个类似MIME的格式。

4.常见http请求头

Accept:浏览器可接受的MIME类型。
Accept-Charset:浏览器可接受的字符集。
Accept-Encoding:浏览器能够进行解码的数据编码方式,比如gzip。Servlet能够向支持gzip的浏览器返回经gzip编码的HTML页面。许多情形下这可以减少5到10倍的下载时间。
Accept-Language:浏览器所希望的语言种类,当服务器能够提供一种以上的语言版本时要用到。
Authorization:授权信息,通常出现在对服务器发送的WWW-Authenticate头的应答中。
Connection:表示是否需要持久连接。如果Servlet看到这里的值为“Keep-Alive”,或者看到请求使用的是HTTP 1.1(HTTP 1.1默认进行持久连接),它就可以利用持久连接的优点,当页面包含多个元素时(例如Applet,图片),显著地减少下载所需要的时间。要实现这一点,Servlet需要在应答中发送一个Content-Length头,最简单的实现方法是:先把内容写入ByteArrayOutputStream,然后在正式写出内容之前计算它的大小。
Content-Length:表示请求消息正文的长度。
Cookie:这是最重要的请求头信息之一
From:请求发送者的email地址,由一些特殊的Web客户程序使用,浏览器不会用到它。
Host:初始URL中的主机和端口。
If-Modified-Since:只有当所请求的内容在指定的日期之后又经过修改才返回它,否则返回304“Not Modified”应答。
Pragma:指定“no-cache”值表示服务器必须返回一个刷新后的文档,即使它是代理服务器而且已经有了页面的本地拷贝。
Referer:包含一个URL,用户从该URL代表的页面出发访问当前请求的页面。
User-Agent:浏览器类型,如果Servlet返回的内容与浏览器类型有关则该值非常有用。

5.请求方式

GET和POST,两者的不同
1). Get是不安全的,因为在传输过程,数据被放在请求的URL中;Post的所有操作对用户来说都是不可见的。

2). Get传送的数据量较小,这主要是因为受URL长度限制;Post传送的数据量较大,一般被默认为不受限制。

3). Get限制Form表单的数据集的值必须为ASCII字符;而Post支持整个ISO10646字符集。

4). Get执行效率却比Post方法好。Get是form提交的默认方法。

6. 响应状态码

HTTP状态码(英语:HTTP Status Code)是用以表示网页服务器超文本传输协议响应状态的3位数字代码。它由 RFC 2616 规范定义的,并得到 RFC 2518、RFC 2817、RFC 2295、RFC 2774 与 RFC 4918 等规范扩展。所有状态码的第一个数字代表了响应的五种状态之一。所示的消息短语是典型的,但是可以提供任何可读取的替代方案。 除非另有说明,状态码是HTTP / 1.1标准(RFC 7231)的一部分。
1) 消息
▪ 100 Continue
▪ 101 Switching Protocols
▪ 102 Processing
2) 成功
▪ 200 OK
▪ 201 Created
▪ 202 Accepted
▪ 203 Non-Authoritative Information
▪ 204 No Content
▪ 205 Reset Content
▪ 206 Partial Content
▪ 207 Multi-Status
3) 重定向
▪ 300 Multiple Choices
▪ 301 Moved Permanently
▪ 302 Move Temporarily
▪ 303 See Other
▪ 304 Not Modified
▪ 305 Use Proxy
▪ 306 Switch Proxy
▪ 307 Temporary Redirect
4) 请求错误
▪ 400 Bad Request
▪ 401 Unauthorized
▪ 402 Payment Required
▪ 403 Forbidden
▪ 404 Not Found
▪ 405 Method Not Allowed
▪ 406 Not Acceptable
▪ 407 Proxy Authentication Required
▪ 408 Request Timeout
▪ 409 Conflict
▪ 410 Gone
▪ 411 Length Required
▪ 412 Precondition Failed
▪ 413 Request Entity Too Large
▪ 414 Request-URI Too Long
▪ 415 Unsupported Media Type
▪ 416 Requested Range Not Satisfiable
▪ 417 Expectation Failed
▪ 418 I’m a teapot
▪ 421 Too Many Connections
▪ 422 Unprocessable Entity
▪ 423 Locked
▪ 424 Failed Dependency
▪ 425 Too Early
▪ 426 Upgrade Required
▪ 449 Retry With
▪ 451 Unavailable For Legal Reasons
5) 服务器错误
▪ 500 Internal Server Error
▪ 501 Not Implemented
▪ 502 Bad Gateway
▪ 503 Service Unavailable
▪ 504 Gateway Timeout
▪ 505 HTTP Version Not Supported
▪ 506 Variant Also Negotiates
▪ 507 Insufficient Storage
▪ 509 Bandwidth Limit Exceeded
▪ 510 Not Extended
▪ 600 Unparseable Response Headers

6.urllib库

掌握urlopen方法和Request对象的使用
相关文章参考
一个爬虫的五脏六腑(从入门到入狱)_第1张图片
一个爬虫的五脏六腑(从入门到入狱)_第2张图片
一个爬虫的五脏六腑(从入门到入狱)_第3张图片
一个爬虫的五脏六腑(从入门到入狱)_第4张图片
一个爬虫的五脏六腑(从入门到入狱)_第5张图片
一个爬虫的五脏六腑(从入门到入狱)_第6张图片

7.正则表达式

此条不详细解说,这里只放一个关于正则表达式学习的网站==》传送门
1)元字符:详见此传送门
2)贪婪与懒惰
3)Python对正则表达式的支持——re模块的使用
a.search 返回Match对象,
b.match
c.findall
d.split
e.sub
f.group(groups)方法如何取分组

8.Xpath和lxml库

1)掌握xpath的使用,能够使用xpath获取节点、属性、内容
详情参见传送门
2)python的lxml库(etree)的使用,能够使用xpath解析网页数据
// 任意地址
/ 绝对位置
/div/a/h2
//div[@id=‘name’] 选取id为name的div的内容
//div[1] 选取第一个div的内容,不存在第零个
//div[starts-with(@id,‘name’)] 以name的id为开头的div
div[contains(@id,‘name’)] 包含name的id为开头的div

9.requests库的使用

快速上手:传送门
1)get和post方法获取网页数据:传送门
requests库是一个常用于http请求的模块,性质是和urllib,urllib2是一样的,作用就是向指定目标网站的后台服务器发起请求,并接收服务器返回的响应内容。
所谓的get方法,便是利用程序使用HTTP协议中的GET请求方式对目标网站发起请求,同样的还有POST,PUT等请求方式,其中GET是我们最常用的,通过这个方法我们可以了解到一个请求发起到接收响应的过程。
post请求方式的使用和get方式并没有很大的区别,本质的区别在于它传递参数的方式并不像get方式一样,通过在url中拼接字段来发送给服务器,他采取了一种相较之下更为安全的操作方式,通过form表单的方式来向服务器传递查询条件。我们同样可以通过浏览器的F12开发者工具或者fiddler抓包工具来看到formdata这个字段,从中获取form表单中的字段信息,很多登录操作就是基于此。
2)如何传递消息头
不考不是重点不整理
3)cookie和session理解并掌握
Cookie和Session都是保存用户状态的机制,又可理解为一种数据结构.Cookie存在客户端(浏览器).
Session存在服务端.
详细讲解

10.理解json以及python的json库的使用

1)理解json的格式
2)json模块的四个方法

a.dumps
b.dump
c.loads
d.load

11.scrapy框架

1)架构
a.Scrapy Engine(引擎):负责Spider、ItemPipeline、Downloader、Scheduler中间的通讯,信号、数据传递等。
b.Scheduler(调度器):它负责接受引擎发送过来的Request请求,并按照一定的方式进行整理排列,入队,当引擎需要时,交还给引擎。
c.Downloader(下载器):负责下载Scrapy Engine(引擎)发送的所有Requests请求,并将其获取到的Responses交还给Scrapy Engine(引擎),由引擎交给Spider来处理
d.Spider(爬虫):它负责处理所有Responses,从中分析提取数据,获取Item字段需要的数据,并将需要跟进的URL提交给引擎,再次进入Scheduler(调度器)。
e.Item Pipeline(管道):它负责处理Spider中获取到的Item,并进行进行后期处理(详细分析、过滤、存储等)的地方。
f.Downloader Middlewares(下载中间件):一个可以自定义扩展下载功能的组件。
g.Spider Middlewares(Spider中间件):一个可以自定扩展和操作引擎和Spider中间通信的功能组件
2)理解并掌握scrapy基本命令
a.startproject
b.genspider
c.bench
d.shell
e.crawl
3)理解Item、settings、pipeline作用及其使用
4)Linkextractor及其属性

传送门
5)能够使用scrapy爬取数据

你可能感兴趣的:(大数据,爬虫)