什么是爬虫? 就是一段自动获取互联网数据的程序 ( 网络爬虫就是为其提供信息来源的程序 ),,,请求网站并提取数据的自动化程序
学习爬虫的目的就是为了获取数据
大数库时代:数据如何产生?
1.大的公司企业:通过用户产生的数据
2.大的数据平台:通过收集或和其他的公司或是企业合作
3.国家政府或大的机构:通过省县乡或是其他方式统计产生的
4.数据咨询公司:通过收集或是和其他公司的合作,会根据数据做分析对比形成报表
5.如果以上方式都不能满足的时候,我们就需要一个爬虫工程师,去专门做数据的提取
爬虫的用途?
1.搜索引擎 2.比价工具(慧慧购物助手) 3.大的资讯网站(jobbole,今日头条...)
4.数据分析与研究积累原始数据资源 5.抢票软件等
客户端请求服务器 , 服务器响应客户端
网站的三大特性?
- 每一个资源都有一个url(又称统一资源定位符),是唯一的
- 网页都是使用HTML(超文本)文本展示数据的
- 通过HTTP/HTTPS(超文本传输协议),获取和传递HTML
怎样实现一个爬虫?
1.找到目标url
2.根据url发起请求
3.解析响应结果:(1). 提取目标数据
(2).如何存在新的url,进一步提取(会执行1-3这个循环)
4.爬虫结束:所有符合条件的url请求全部获取完毕,就意味着爬虫结束
为什么要使用python做爬虫?
python:语法简介,代码优美,可读性高,并且对各模块的支持比较好,有很多强大的 三方包,对多任务的处理也比较好,urllib,requests都能够很好的帮助我们实现一个爬虫项目,解析的库也非常多(lxml,bs4,pyquery...),并且还有强大的scrapy爬虫框架和scrapy_redis分布式爬虫框架.并且python作为一门胶水语言,对于其他语言的调度也是非常方便的。
爬虫分为两类:
1. 通用爬虫:通用爬虫是浏览器的重要组成部分,会将互联网上的所有网页下载到 本地,做了一个镜像备份,提取重要的数据(过滤数据,分词,等等)。
搜索引擎的爬取的url 是通过什么方式获取的?- 通过网站的外链
- 通过网页提交url:(百度:http://zhanzhang.baidu.com/linksubmit/url)
- 通过各大搜索引擎公司也会和 DNS 服务商的合作
DNS : 讲我们的域名转化为ip的一种技术。
2.聚焦爬虫:是面向主题的爬虫,由需求产生的,是一种定向的爬虫,
在爬取网页 数据的时候,会对网页数据进行一些赛选,保证之抓取和
需求相关的数据,以后我们更多的就是实现聚焦爬虫。
通用爬虫(搜索引擎)的缺点? - 需要遵守robot协议:robots协议 (也称:爬虫协议,机器人协议。) 全称是: 网络爬虫排除标准(Robots Exclusion Protocol) ,网站通过robots协议告诉
搜索引擎哪些页面可以抓取 , 哪些页面不能抓取。 - 搜索引擎返回的结果是千篇一律的没有很好的针对性,不能够为特殊的群体返回对 应的数据.
- 搜索引擎一般情况下获取的是文本信息,处理图像,音频,视频,多媒体,还是有 困难的。
做爬虫需要掌握的基础知识? - python 的基础语法
2. 前端知识 (html) - 数据持久化的知识 ( 本地的存储,mysql ,mongodb,redis。)
- 了解基本的反爬手段 (header请求头,验证码,cookies,代理)
- 静态页面和动态页面页面(ajax,js),selenium(获取的页面源码是经过浏览器渲染
之后的最终结果) - 多任务处理,爬虫框架,分布式爬虫等等....
HTTP:超文本传输协议,主要使用来将html文本传输到本地浏览器.
HTTPS:作用和HTTP一致,只是多了SSL(安全套接字层),保证数据传输的安全性.
1.建立一个安全有效的数据传输通道,保证数聚的安全性.
2.保证网站的真实性和有效性.
HTTP的端口号为80, HTTPS的端口号为443
HTTP通信由两部分组成: 客户端请求消息 与 服务器响应消息
HTTP请求主要分为Get和Post两种方法
GET是从服务器上获取数据,POST是向服务器传送数据
URI(Uniform Resource Identifier):统一资源标识符
URL(Uniform / Universal Resource Locator的缩写):统一资源定位符,是用于完整地描述Internet上网页和其他资源的地址的一种标识方法。
URN(Universal Resource Name):统一资源名称,只命名资源而不指定如何定位资源
那三者之间有什么关系呢? URI是URL与URN的父类,URN用的很少,我们一般会提到URI和URL,每一个URL都是一个URI,但是并不是每一个URI都是一个URL.
url的组成部分:
1. scheme:协议
2. host:指的是域或者ip
3. port:端口
4. path:资源路径
5. query-string:请求的参数
6. anchor:锚点,主要是实现页面的定位作用
请求头:
User-Agent:模拟浏览器加载
Cookies:携带cookies第一可以维持会话,告诉浏览器用户的身份信息
Refere:告诉浏览器,当前请求,是从哪个页面发起的.
常见的状态码:
2xx:表示服务器成功接收请求并已完成整个处理过程。
200(OK 请求成功)。
3xx:为完成请求,客户需进一步细化请求。例如:请求的资源已经移动一个新地址、 常用的状态码:
301: 永久重定向
302:临时重定向(所请求的页面已经临时转移至新的url)
4xx:客户端的请求有错误.
400:错误请求,服务器无法解析请求
401:未授权,没有进行身份验证
403:服务器拒绝访问
404:服务器无法找到被请求的网页
408:请求超时
5xx:服务器端出现错误
500:服务器内部错误
501:服务器不具备完成请求的功能
503:服务器不可用
爬虫的基本流程
1:向服务器发起请求
通过HTTP库向目标站点发起请求,即发送一个Request,请求可以包含额外的headers 等信息,等待服务器的响应。
2:获取响应内容
如果服务器正常响应,会得到一个Response,Response的内容便是所要获取的页面内 容,类型可能有HTML、JSON、二进制文件(如图片、视频等类型)。
3:解析内容
得到的内容可能是HTML,可以用正则表达式、网页解析库进行解析。可能是 JSON,可以直接转成JOSN对象进行解析,可能是二进制数据,可以保存或者进一步处理
4:保存内容
保存形式多样,可以保存成文本,也可以保存至数据库,或者保存成特定格式的文件。
什么是Response和Request ?
1. 浏览器发送消息给服务器这个过程就叫做 http Request
2. 服务器接受到浏览器发送的消息后,然后把消息传回给浏览器 这个过程叫做
httl Response
3. 浏览器收到服务器的Response信息后,会对信息做相应的处理,然后返回页面。
Request中包含哪些内容?
1:请求方式
主要是GET、POST两种类型,另外还有HEAD、PUT、DELETE、OPTIONS等。
2:请求URL
URL全称是统一资源定位符,如一个网页文档、一张图片、一个视频等都可以用URL 来唯一来确定
3:请求头
包含请求时的头部信息,如User-Agent、Host、Cookies等信息
4:请求体
请求时额外携带的数据,如表单提交时的表单数据
Response中包含哪些内容?
1:响应状态
有多种响应状态,如200代表成功,301代表跳转,404代表找不到页面,502代表服务 器错误等
2:响应头
如内容类型、内容长度、服务器信息、设置cookies等等
3:响应体
最主要的部分,包含了请求资源的内容,如网页HTML、图片二进制数据等。
示例代码:
‘’‘’‘’‘’
from fake_useragent import UserAgent
import requests
ua=UserAgent()
请求的网址
url="http://www.baidu.com"
请求头
headers={"User-Agent":ua.random}
请求网址
response=requests.get(url=url,headers=headers)
响应体内容
print(response.text)
响应状态信息
print(response.status_code)
响应头信息
print(response.headers)
‘’‘’‘’‘’‘’
怎样保存数据?
1. 文本 (存文本,json)
2. 关系型数据库(myssql ....)
3. 非关系型数据库(mongodb ,redis ....)
4. 二进制文件(如:图片,视频....)
常用的请求报头:
1. Host (主机和端口号)
Host:对应网址URL中的Web名称和端口号,用于指定被请求资源的Internet主机和端口号,通常属于URL的一部分。
2.Connection (链接类型) Connection:表示客户端与服务连接类型
3. Upgrade-Insecure-Requests (升级为HTTPS请求)
Upgrade-Insecure-Requests:升级不安全的请求,意思是会在加载 http 资源时自动替换成 https 请求,让浏览器不再显示https页面中的http请求警报
4. User-Agent (浏览器名称)
User-Agent:是客户浏览器的名称,以后会详细讲。
5. Accept (传输文件类型)
Accept:指浏览器或其他客户端可以接受的MIME(Multipurpose Internet Mail Extensions(多用途互联网邮件扩展))文件类型,服务器可以根 据它判断并返回适当的文件格式。 举例:
Accept: /:表示什么都可以接收。
Accept:image/gif:表明客户端希望接受GIF图像格式的资源;
Accept:text/html:表明客户端希望接受html文本。
Accept: text/html, application/xhtml+xml;q=0.9, image/*;q=0.8:表示浏览器支持的 MIME 类型分别是 html文本、xhtml和xml文档、所有 的图像格式资源。
q是权重系数,范围 0 =< q <= 1,q 值越大,最先显示
6. Referer (页面跳转处)
Referer:表明产生请求的网页来自于哪个URL,用户是从该 Referer页面访问到当前请求的页面。
7. Accept-Encoding(文件编解码格式)
Accept-Encoding:指出浏览器可以接受的编码方式。
Accept-Language(语言种类)
Accept-Langeuage:指出浏览器可以接受的语言种类,如en或en-us指英语,zh或者zh-cn指中文,当服务器能够提供一种以上的语言版本时要用到。
8.Accept-Charset(字符编码) Accept-Charset:指出浏览器可以接受的字符编码。 举例:Accept-Charset:gb2312,utf-8
gb2312:标准简体中文字符集;
utf-8:UNICODE 的一种变长字符编码,可以解决多种语言文本显示问题,从而实现应用国际化和本地化。
Cookie (Cookie)
Cookie:浏览器用这个属性向服务器发送Cookie。Cookie是在浏览器中寄存的小型数据体,它可以记载和服务器相关的用户信息,也可以用来实现会话功能。
- Content-Type (POST数据类型)
Content-Type:POST请求里用来表示的内容类型。
举例:Content-Type = Text/XML; charset=gb2312:
指明该请求的消息体中包含的是纯文本的XML类型的数据,字符编码采用“gb2312”。
服务端HTTP响应(Response)
HTTP响应也由四个部分组成,分别是: 状态行、消息报头、空行、响应正文
cookie 和 session:
Cookie:通过在 客户端 记录的信息确定用户的身份。
Session:通过在 服务器端 记录的信息确定用户的身份。
str 和 bytes 和 str 的区别:
bytes 存储字节( 通常值在 range(0, 256))
str 存储unicode字符( 通常值在0~65535)
bytes 与 str 的转换
编码(encode)
str ----------> bytes
b = s.encode(encoding='utf-8')
解码(decode)
bytes ----------> str
s = b.decode(encoding='utf-8')ession: 一个用户发送的请求,必须在一个地方保存客户端的信息。