python基础之爬虫基础理论

前言:

       在初步了解到正则表达式之后,今天我们学习一下关于爬虫的理论及最基本的爬去!

1,http协议

http 超文本传输协议
互联网上传输数据的一种规范

1.特点
支持的数据格式比较广泛,json/text/html/xml/data
传输速度快
无状态的协议,第一次请求与第二次请求没有关系
2,http协议请求报文和响应报文
请求报文:发请求时所携带的一种信息
1),请求行(请求方式grt或post,www.baidu.com,http/1.1版本)
2,请求头:键值对,设置此次请求的相关配置信息
HOST请求的主机地址,
accetp:所接受的文件类型
user_agent:请求表示
请求体:
发送给服务端的一些数据
客户端向服务端发送信息

响应报文
状态行(请求成功或失败),状态码,http协议版本
响应头  connect-type服务器返回问数据类型
connect-length 服务器返回的数据长度
server 服务器的类型
expires:过期时间

响应体
响应体里面是服务器向客户端返回的数据

3.http协议的请求方法GET POST
如果只是从服务器端获取数据,使用GET请求
如果要上传重要数据,使用POST请求
在选用GET或POST时,但有时会根据接口文档给出的要求进行选择

2,urllib模块

使用爬虫的代码语句,通常要用到如下几个模块

from urllib import request
from urllib.request import urlopen
from urllib.parse import urlencode

获取某个网站元素

url = 'http://zz.58.com'
url = 'https://www.douban.com/'
# 调用request类的urlopen函数打开某个地址
res = request.urlopen(url)
html = res.read().decode('utf-8')
print(html)

请求的方式(GET ,POST)

req = request.Request('https://www.douban.com/')
res = urlopen(req)
print(res.read().decode('utf-8'))
# get_method 得到此次请求的方式(GET或者POST)
print(req.get_method())
# data被声明成了一个@property属性
# 用于向请求中添加是数据或者获取数据
req.data = 'name=zhangsan&password=123'
print('此次请求方式为:',req.get_method())

urlencode()函数

# urlencode函数可以将字典对象转化为查询字符串
# 每一对键值之间用&连接,可以实现中文编码
# 因为url地址中不允许出现中文,必须经过编码才能实现
url = 'https://mail.qq.com'
args = urlencode(user_dict)
print(type(args))
print(args)

3,设置请求头

通常HTTP消息包括客户机向服务器的请求消息和服务器向客户机的响应消息。这两种类型的消息由一个起始行,一个或者多个头域,一个只是头域结束的空行和可 选的消息体组成。HTTP的头域包括通用头,请求头,响应头和实体头四个部分。每个头域由一个域名,冒号(:)和域值三部分组成。域名是大小写无关的,域 值前可以添加任何数量的空格符,头域可以被扩展为多行,在每行开始处,使用至少一个空格或制表符。

常用语法

# urllib设置请求头
from urllib.request import Request,urlopen
url = 'https://www.baidu.com'
# 参数一:请求的地址
# 参数二:设置请求头
req = Request(url,headers={
    # 服务器通过user-agent字段判断是通过什么方式访问的
    # user-agent 设置用户标识
    # python爬虫默认的user-agent的值是:python-urllib/3.6.5
    'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:61.0) Gecko/20100101 Firefox/61.0',
    'Referer':'https://www.baidu.com'
    # referer:用于标识当前是通过哪一个网址入口访问的url
    # 服务器在读取referer的值的时候,会判断当前的url访问是不是通过正常的网址入口进入的

})
res = urlopen(req)
print(res.read().decode('utf-8'))

#1.判断user-agent是否是一Python开头的,如果是就禁止访问
# 2.并判断一个频繁请求是不是同一个ip发出的,这时候服务器会限制
# 解决方法:使用代理ip

4,爬虫与反爬虫的含义

#########爬虫=====================
1,概念
自动批量获取网站数据的程序
2,爬虫的目的
1)。获取数据,用于填充公司数据库
2)。通过爬虫数据制作搜索引擎
3)。通过爬虫数据进行数据采集和分析
==================反爬虫===============
概念:在服务器端使用的一种技术手段阻止程序的爬行,对网站数据进行保护

设置访问头访问糗事百科

      一个简单的设置请求头访问网站的操作

from  urllib.request import Request,urlopen
url = 'http://www.qiushibaike.com'
req = Request(url,headers={
     'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:61.0) Gecko/20100101 Firefox/61.0',
     'Referer':'https://www.qiushibaike.com'
})
res = urlopen(req)
print(res.read().decode('utf-8'))

今天简单了解一下基础,明天继续加油干!

猜你喜欢

转载自blog.csdn.net/donquixote_/article/details/81121645