urllib和正则

urllib

urllib是python内部自带的一个用于爬虫的组件

如何使用urllib
GET

1 导入 from urllib import request
2 发起请求
<1> 创建一个request对象

url > 目标url地址
data=None 默认为None 表示是一个get请求 反之为post请求
headers={} 请求头

<2> 发起请求

import ssl
context = ssl._create_unverified_context()
headers = {
'User-Agent':
    'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36'
}
req = request.Request(
    url='http://www.baidu.com',
    headers=headers
)
response = request.urlopen(
    req,timeout=20,context=context
)

解释一些参数
url > 发起请求的目标url地址
data=None 默认为None 表示是一个get请求 反之为post请求
timeout=socket._GLOBAL_DEFAULT_TIMEOUT 设置请求超时的时间
context=None 忽略ssl认证

3.得到响应结果

code = response.code # 响应状态码
content = response.read()  # 读取页面源码
headers = response.headers # 响应头
print(code,len(content),headers)

POST

from urllib import request
from urllib import parse
import json

同样需要构建请求头 发起请求 传递表单数据 发起请求 需要对对表单数据进行编码转译

decode的作用是将其他编码的字符串转换成unicode编码 encode的作用是将unicode编码转换成其他编码的字符串
isinstance(str,unicode) 用来判断字符串是否为unicode

url = 'http://127.0.0.1:8000/api/login/'
data = {
    'username':'13546214522',
    'password':'123456',
}
# 对表单数据进行转换转换成url编码格式
data=parse.urlencode(data).encode('utf-8')
print('============================',data)
# 添加请求头  构建请求
headers = {
'User-Agent':
    'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36'
}
req = request.Request(url=url,data=data,headers=headers)
response = request.urlopen(req,timeout=10)

异常处理

try:
    response = request.urlopen(req,timeout=10)
except error.HTTPError as err:
    print(err.code)
    print(err.headers)
    print(err.reason)
except error.URLError as err:
    print(err.reason)

什么是爬虫网络爬虫?
是一种按照一定的规则,自动抓取万维网信息的程序或者脚本

爬虫的用途?
搜索引擎
咨询新闻网站
购物助手(慧慧购物)
数据分析与研究积累原始数据资源
抢票软件等

爬虫的分类?
通用爬虫
(搜索引擎抓取系统(百度、谷歌、雅虎等)的重要组成部分,主要目的是将互联网上的网页下载到本地,形成一个互联网内容的镜像备份)
第一步:搜索引擎爬虫抓取网页流程
1.首先选取一部分的种子URL,将这些URL放入待抓取URL队列;
2.取出待抓取URL,解析DNS得到主机的IP,并将URL对应的网页下载下来,存储进已下载网页库中,并且将这些URL放进已抓取URL队列。
3.分析已抓取URL队列中的URL,分析其中的其他URL,并且将URL放入待抓取URL队列,从而进入下一个循环

	第二步:数据存储
		搜索引擎通过爬虫爬取到的网页,将数据存入原始页面数据库。其中的页面数据与用户浏览器得到的HTML是完全一样的。
	
	第三步:预处理

		搜索引擎将爬虫抓取回来的页面,进行各种步骤的预处理。
			提取文字、中文分词等

	第四步:提供检索服务,网站排名


Robots协议:
	搜索引擎蜘蛛:一般需要准守Robots协议

	Robots协议:(也叫爬虫协议、机器人协议等),全称是“网络爬虫排除标准”(Robots Exclusion Protocol),网站通过Robots协议告诉搜索引擎哪些页面可以抓取,哪些页面不能抓取,


聚焦爬虫:
	聚焦爬虫,是"面向特定主题需求"的一种网络爬虫程序,它与通用搜索引擎爬虫的区别在于:聚焦爬虫在实施网页抓取时会对内容进行处理筛选,尽量保证只抓取与需求相关的网页信息。

七层协议??

OSI 七层模型通过七个层次化的结构模型使不同的系统不同的网络之间实现可靠的通讯,因此其最主要的功能就是帮助不同类型的主机实现数据传输

应用层
表示层
会话层
传输层 (TCP、UDP)
网络层
数据链路层
物理层

四层协议、五层协议

HTTP与HTTPS

URI、URL、URN

URL 的组成部分
scheme:协议(例如:http, https, ftp)
host:服务器的IP地址或者域名
port:服务器的端口(如果是走协议默认端口,缺省端口80)
path:访问资源的路径
query-string:参数,发送给http服务器的数据
anchor:锚(跳转到网页的指定锚点位置)

http://127.0.0.1:8000/artical/?name='snclas'&page=2&pagesize=10

常用的请求报头

1,user-agent(浏览器名称)

User-Agent:是客户浏览器的名称,以后会详细讲

2,Cookie

Cookie:浏览器用这个属性向服务器发送Cookie.Cookie是在浏览器中七寸的小型数据体,它可以记载和服务器相关的用户信息,也可以用来实现会话功能

3,Referer(页面跳转处)

Referer:表明产生请求的网页来自于哪个URL,用户是该Referer页面访问到当前请求的页面,这个属性可以用来跟踪Web请求来自哪个页面,是从什么网站来的等。

有时候遇到下载某网站图片,需要对应的referer,否则无法下载图片,那是因为人家做了防盗链,原理就是根据referer去判断是否是本网站的地址,如果不是则拒绝,如果是,就可以下载;

Cookie 和 Session:

服务器和客户端的交互仅限于请求/响应过程,结束之后便断开,在下一次请求时,服务器会认为新的客户端。

为了维护他们之间的链接,让服务器知道这是前一个用户发送的请求,必须在一个地方保存客户端的信息。

cookies和session,会话保持

cookies: 通过在客户端记录的信息确定用户的身份。
session: 通过在服务器端记录的信息确定用户的身份。

响应的状态码

100~199:表示服务器成功接收部分请求,要求客户端继续提交其余请求才能完成整个处理过程。
2XX:表示服务器成功接收请求并已完成整个处理过程。
200:(OK 请求成功)
3XX:未完成请求,客户端进一步细化请求。(例如:请求的资源已经移动一个新地址)

常用
301:永久重定向
302:临时重定向(所请求的页面已经临时转移至新的url)
4XX:客户端的请求有错误
400:错误请求,服务器无法解析请求
401:未授权,没有进行身份验证
403:服务器拒绝访问
404:服务器无法找到被请求的网页
405:请求方式不被允许
408:请求超时
5XX:服务器端出现错误
500:服务器内部错误
501:服务器不具备完成请求的功能
503:服务器不可用

urllib高级用法(设置代理)

代理的作用:

1,突破自身IP访问的限制,访问一些平时不能访问的站点。
2,提高访问速度:通常代理服务器都设置一个较大的硬盘缓冲区,当有外界的信息通过时,同时也讲偶保存到缓冲区中,当其他用户在访问相同的信息时,则直接由缓冲区中取出信息,传给用户,以提高访问速度。
3,隐藏真实IP:上网者也可以通过这种方式隐藏自己的IP,免受攻击,对于爬虫来说,我们用代理就是为了隐藏自身IP,防止自身的IP被封锁。
正则

单字符匹配
\d:匹配数字[0-9]
\D:匹配非数字 [\d]/[0-9]<’^'表示取反>
\w:匹配单词字符[a-zA-Z0-9]
\W:匹配非单词字符[^\w]
\s:匹配空白字符(空格 \t…)
\S:匹配非空白字符[^\s]
.:匹配除了换行符‘\n’之外的任意字符
多字符匹配(贪婪模式:尽可能多地匹配)
:匹配前面任意字符 任意次数
?:匹配?前面任意字符 0次或1次
+:匹配+前面任意字符 至少1次
非贪婪匹配(非贪婪模式:尽可能少地匹配)
*?
??
+?
其他
|:表示或 匹配左边或者右边的正则表达式之一
():分组 
^:匹配开头
$:匹配结尾
{n,m}: 匹配{n,m}前面的正则表达式 匹配n-m次
[0-9a-z]: 表示匹配数字0-9,字母a-z
[^a-z]: 不匹配a-z之间的字符

re模块

一切正则的开始:compile 方法: 将正则表达式的字符串形式编译为一个 Pattern 对象
2. match 方法:从起始位置开始匹配符合规则的字符串,单次匹配,匹配成功,立即返回Match对象,未匹配成功则返回None
3 .search 方法:从整个字符串中匹配符合规则的字符串,单次匹配,匹配成功,立即返回Match对象,未匹配成功则返回None
4 .findall 方法:匹配所有合规则的字符串,匹配到的字符串放到一个列表中,未匹配成功返回空列表
5. finditer 方法:匹配所有合规则的字符串,返回可迭代对象
6.split 方法:根据正则匹配规则分割字符串,返回分割后的一个列表
7 .sub 方法:替换匹配成功的指定位置字符串

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值