爬虫入门之爬虫的基本知识

1.1爬虫的基础概念

1.1.1目标
理解为什么要学习爬虫
掌握爬虫的概念
理解爬虫的分类
掌握爬虫的流程

  1. 为什么要学习爬虫(理解)
    如今,人工智能,大数据离我们越来越近,很多公司在开展相关的业务,但是人工智能和大数据中有一个东西非常重要,那就是数据,但是数据从哪里来呢?

首先我们来看下面这个例子:

新浪指数

这是微博的微指数的一个截图,他把在微博上的用户的微博和评论中的关键词语做了提取,然后进行了统计,然后根据统计结果得出某个词语的流行趋势,之后进行了简单的展示

类似微指数的网站还有很多,比如百度指数,阿里指数,360指数等等,这些网站有非常大的用户量,他们能够获取自己用户的数据进行统计和分析

那么对于一些中小型的公司,没有如此大的用户量的时候,他们该怎么办呢?

1.1 数据的来源
去第三方的公司购买数据(比如企查查)
去免费的数据网站下载数据(比如国家统计局)
通过爬虫爬取数据
人工收集数据(比如问卷调查)
在上面的来源中:人工的方式费时费力,免费的数据网站上的数据质量不佳,很多第三方的数据公司他们的数据来源往往也是爬虫获取的,所以获取数据最有效的途径就是通过爬虫爬取

1.2 爬取到的数据用途
百度新闻,一家并不是做新闻的公司,这个网站上的新闻数据从哪里来的呢? 百度新闻 通过点击,我们可以发现,他的新闻数据都是其他网站上的,在百度新闻上仅仅做了展示

如果后续我们要做一个网站,天天新闻,是不是也可以这样做呢

那么同样的,我们后续想要做一个和网易云音乐类似的音乐网站,是不是也可以这样来做呢? 网易云音乐

通过前面的列子,能够总结出,爬虫获取的数据的用途:

进行在网页或者是app上进行展示
进行数据分析或者是机器学习相关的项目
2. 什么是爬虫(重点掌握)
网络爬虫(又被称为网页蜘蛛,网络机器人)就是模拟客户端发送网络请求,接收请求响应,一种按照一定的规则,自动地抓取互联网信息的程序。

原则上,只要是浏览器(客户端)能做的事情,爬虫都能够做

  1. 爬虫的更多用途(了解)
    12306抢票

网站上的投票

短信轰炸

注册页面1
注册页面2
注册页面3
小结
本小结重点
爬虫的概念,重点理解模拟浏览器的内涵
爬虫的用途
爬虫数据数据的用途

1.1.2爬虫的分类和爬虫的流程
目标
掌握爬虫的分类
掌握爬虫的流程
了解搜索引擎的知识
了解robots协议

  1. 爬虫的分类
    在上一小结中,我们介绍爬虫爬取到的数据用途的时候,给大家举了两个例子,其实就是两种不同类型的爬虫

根据被爬网站的数量的不同,我们把爬虫分为:

通用爬虫 :通常指搜索引擎的爬虫

聚焦爬虫 :针对特定网站的爬虫

2.爬虫的流程
请思考:如果自己要实现一个和百度新闻一样的网站需要怎么做?

2.1 聚焦爬虫的工作流程如下:

2.2 搜索引擎的工作流程如下:
但是搜索引擎类似的通用爬虫的工作流程有些不同

2.3 搜索引擎的局限性
通用搜索引擎所返回的网页里90%的内容无用。

图片、音频、视频多媒体的内容通用搜索引擎无能为力

不同用户搜索的目的不全相同,但是返回内容相同

  1. robots协议
    Robots协议:网站通过Robots协议告诉搜索引擎哪些页面可以抓取,哪些页面不能抓取,但它仅仅是道德层面上的约束

例如:淘宝的robots协议

小结
本小结重点
爬虫的分类
爬虫的流程
robots协议的理解

1.1.3HTTP和HTTPS的复习
目标
掌握http和https的概念
掌握HTTP的请求过程
掌握HTTP的请求形式
掌握HTTP的常见请求头
掌握GET和POST的区别
了解响应状态码

  1. 为什么要复习http和https

  2. http和https的概念(掌握)
    HTTP
    超文本传输协议
    默认端口号:80
    HTTPS
    HTTP + SSL(安全套接字层)
    默认端口号:443
    HTTPS比HTTP更安全,但是性能更低

  3. 浏览器发送HTTP请求的过程(重点理解)

浏览器会主动请求js,css等内容,js会修改页面的内容,js也可以重新发送请求,最后浏览器渲染出来的内容在elements中,其中包含css,图片,js,url地址对应的响应等。

但是在爬虫中,爬虫只会请求url地址,对应的拿到url地址对应的响应

浏览器渲染出来的页面和爬虫请求的页面并不一样

所以在爬虫中,需要以url地址对应的响应为准来进行数据的提取

  1. url的形式
    url的形式:scheme://host[:port#]/path/…/[?query-string][#anchor]

scheme:协议(例如:http, https, ftp)
host:服务器的IP地址或者域名
port:服务器的端口(如果是走协议默认端口,80 or 443)
path:访问资源的路径
query-string:参数,发送给http服务器的数据
anchor:锚(跳转到网页的指定锚点位置)
http://localhost:4000/file/part01/1.2.html
http://item.jd.com/11936238.html#product-detail
url地址中是否包含锚点对响应没有影响
5. HTTP请求的形式

这个图大家见过很多次,那么在浏览器headers中,点击view source来具体观察其中的请求行,请求头部和请求数据是什么样子的

  1. HTTP常见请求头
    Host (主机和端口号)
    Connection (链接类型)
    Upgrade-Insecure-Requests (升级为HTTPS请求)
    User-Agent (浏览器名称)
    Accept (传输文件类型)
    Referer (页面跳转处)
    Accept-Encoding(文件编解码格式)
    Cookie (Cookie)
    x-requested-with :XMLHttpRequest (是Ajax 异步请求)
    7.常见的请求方法
    GET
    POST
    get请求和post请求的区别可以参w3school

8.响应状态码(status code)
常见的状态码:

200:成功
302:临时转移至新的url
307:临时转移至新的url
404:not found
500:服务器内部错误
小结
本小结重点
理解爬虫获取的数据和浏览器获取的数据不一样
掌握HTTP的常见请求头
了解GET和POST的区别
掌握http和https的区别
了解常见的响应状态码

1.1.4字符串相关的复习
目标
掌握字符,字符集,ASCII,unicode,UTF-8的相关内容
掌握python2和python3中不同类型的字符串的相互转化

  1. Unicode UTF8 ASCII的补充
    字符(Character)是各种文字和符号的总称,包括各国家文字、标点符号、图形符号、数字等

字符集(Character set)是多个字符的集合

字符集包括:ASCII字符集、GB2312字符集、GB18030字符集、Unicode字符集等

ASCII编码是1个字节,而Unicode编码通常是2个字节。

UTF-8是Unicode的实现方式之一,UTF-8是它是一种变长的编码方式,可以是1,2,3个字节

了解更多请看故事:ascii和unicode以及utf-8的起源

2.python3中的字符串
python3中两种字符串类型:

str : unicode的呈现形式

bytes :字节类型,互联网上数据的都是以二进制的方式(字节类型)传输的

使用方法:

str 使用encode方法转化为 bytes
bytes 通过decode转化为 str
编码方式解码方式必须一样,否则就会出现乱码

3.python2中的字符串
python2中字符串有两种类型

unicode类型
字节类型
在Python2中,字符串无法完全地支持国际字符集和Unicode编码。为了解决这种限制,Python2对Unicode数据使用了单独的字符串类型。要输入Unicode字符串字面量,要在第一个引号前加上’u’。

Python2中普通字符串实际上就是已经编码(非Unicode)的字节字符串。

3.1 python2中的字节类型字符串
python2 中定义字符串的时候,会自动将字符串转换为合适编码的字节字符串,比如中文:自动转换为utf-8编码的字节字符串

看下面的例子:

>>> a = "传智播客" #如此定义字符串的时候,其为字节类型
>>> a '\xe4\xbc\xa0\xe6\x99\xba\xe6\x92\xad\xe5\xae\xa2'
>>> type(a) <type 'str'>

上面的这种定义和在字符串前面加上b的效果一样

>>> c = b"传智播客"
>>> c
'\xe4\xbc\xa0\xe6\x99\xba\xe6\x92\xad\xe5\xae\xa2'
>>> type(c)
<type 'str'>
>>> c.decode("utf-8")
u'\u4f20\u667a\u64ad\u5ba2'

由于a已经是字节类型,所以只能对其进行解码,转化为str类型

    >>> a.encode("utf-8")
    Traceback
    (most recent call last): File "<stdin>", line 1, in <module>

UnicodeDecodeError: 'ascii' codec can't decode byte 0xe4 in position 0: ordinal not in range(128)

>>> a.decode("utf-8")
u'\u4f20\u667a\u64ad\u5ba2'

3.2 python2中的unicode类型字符串
如果需要定义unicode字符串,即非字节类型的字符串的时候需要在前面加上u

>>> b = u"传智播客"
>>> b u'\u4f20\u667a\u64ad\u5ba2'
>>> type(b)
<type 'unicode'>
>>> b.encode("utf-8") '\xe4\xbc\xa0\xe6\x99\xba\xe6\x92\xad\xe5\xae\xa2'

3.3 python2中字节类型和unicode类型的转化
字节类型通过decode转化为unicode类型
unciode类型通过encode方法转化为字节类型
方法的使用和python3相同,但是在方法中默认的编解码方式为ascii,对中文需要手动指定为utf-8

>>> b
u'\u4f20\u667a\u64ad\u5ba2'

>>> b.encode()
Traceback
(most recent call last): File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-3: ordinal not in range(128)

>>> b.encode("utf-8") '\xe4\xbc\xa0\xe6\x99\xba\xe6\x92\xad\xe5\xae\xa2'

小结
本小结重点
掌握unicode和utf-8和ascii的区别
掌握python3中不同类型字符串的相互转化
掌握python2中不同类型的字符串的相互转化

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值