爬虫学习笔记一:网络爬虫之规则(MOOC北京理工大学)

单元一:Request库入门

Request库的get()方法

r=requests.get(url);

  • 构造一个向服务器请求资源的Request对象

  • get()方法返回一个包含服务器资源的Response对象(即r使一个Response对象)

  • Response对象包含从服务器返回的所有资源(爬虫返回的全部内容)

  • get()函数完整使用方法:request.get(url,params=None,**kwargs)
    ​ url:拟获取页面的URL链接
    ​ params:URL中的额外参数,字典或字节流格式,可选
    ​ **kwargs:12个控制访问的参数,可选

Response对象

>>> import requests
>>> r=requests.get("http://www.baidu.com")
>>> print(r.status_code)	# 检测状态码:200->成功;404->失败
>>> type(r)					# 检测r的类型
>>> r.headers				# 返回get请求获得页面的头部信息
  • Response对象包含服务器返回的所有信息和向服务器请求的Request的信息

  • 属性
    ​ ① r.status_code:HTTP请求的返回状态
    ​ ② r.text:HTTP响应内容的字符串形式,即URL对应的页面内容
    ​ ③ r.encoding:从HTTP header中猜测的响应内容编码方式(header中的charset),如果header中不存在charset,则认为编码为ISO-8859-1
    ​ ④ r.apparent_encoding:从网页内容中分析出的响应内容编码方式(备选编码方式)
    ​ ⑤ r.content:HTTP响应内容的二进制形式

爬取网页的通用代码框架

  • Requests库的异常
    ​ ① requests.ConnectionError:网络连接错误,如DNS查询失败、拒绝连接等
    ​ ② requests.HTTPError:HTTP错误异常
    ​ ③ requests.URLReqired:URL缺失异常
    ​ ④ requests.TooManyRedirects:超过最大重定向次数,产生重定向异常
    ​ ⑤ requests.ConnectTimeout:连接远程服务器超时异常(连接过程产生的异常)
    ​ ⑥ requests.Timeout:请求URL超时,产生超时异常(发出请求到获得内容整个过程的超时异常)

  • Response类提供的关于异常的方法
    ​ r.raise_for_status():如果不是200,产生异常requests.HTTPError

import requests
def getHTMLText(url):
    try:
        r=requests.get(url,timeout=30)
        r.raise_for_status()	# 若状态不是200,引发HTTPError异常
        r.encoding=r.apparent_encoding
        return r.text
    except:
        return "产生异常"
if __name__=="__main__":
    url="http://www.baidu.com"
    print(getHTMLText(url))

HTTP协议及Requests库方法

  • Requests库的7个主要方法
    ​ ① requests.requests():构造一个请求,支撑以下个方法的基础方法
    ​ ② requests.get():获取HTML网页的主要方法,对应于HTTP的GET
    ​ ③ requests.head():获取HTML网页头信息的方法,对应于HTTP的HEAD
    ​ ④ requests.post():向HTML网页提交POST请求的方法,对应于HTTP的POST
    ​ ⑤ requests.put():向HTML网页提交PUT请求的方法,对应于HTTP的PUT
    ​ ⑥ requests.patch():向HTML网页提交局部修改请求,对应于HTTP的PATCH
    ​ ⑦ requests.delete():向HTML页面提交删除请求,对应于HTTP的DELETE

  • URL
    ​ URL是通过HTTP协议存取资源的Internet路径,一个URL对应一个数据资源
    ​ 格式:http://host[:port] [path]
    ​ host:合法的Internet主机域名或IP地址
    ​ port:端口号,可省略,缺省端口为80
    ​ path:请求资源的路径

  • HTTP协议(超文本传输协议):是一个基于“请求与相应”模式的、无状态(第一次和第二次请求之间没有关联)的应用层协议。采用URL作为定位网络资源的标识

  • HTTP协议对资源的操作(每一次操作都是独立无状态的)
    ​ ① GET:请求获取URL位置的资源(全部资源)
    ​ ② HEAD:请求获取URL位置资源的响应消息报告,即获得该资源的头部信息(资源太大)
    ​ ③ POST:请求URL位置的资源后附加新的数据
    ​ ④ 当我们向URLpost了一个字典/键值对的时候,键值对会默认存储到表单等字段下.向URLpost一个字符串,字符串自动编码为data
    ​ ⑤ PUT:请求向URL位置存储一个资源,覆盖原URL位置的资源
    ​ ⑥ PATCH:请求局部更新URL位置的资源,即改变该处资源的部分内容(与PUT比较,节省网络带宽)
    ​ ⑦ DELETE:请求删除URL位置存储的资源

>>> payload={"key1":"value1","key2":"value2"}
>>> r=requests.post("http://httpbin.org/post",data=payload)
>>> print(r.text)

Requests库主要方法解析

  • requests.request(method,url,**kwargs)
    ​ - method:请求方式,对应get/put/post/options(从服务器获取服务器与客户端打交道的参数)等7种
    ​ - URL:拟获取页面的url连接
    ​ - **kwargs:控制访问的参数,共13个(均为可选项)
    ​ 1)params:字典或字节序列,作为参数增加到URL中
    ​ 2)data:字典、字节序列或文件对象,作为Request的内容
    ​ 3)json:JSON格式的数据,作为Request的内容
    ​ 4)headers:字典,HTTP定制头(可用来定制访问URL的HTTP的协议头、模拟浏览器)
    ​ 5)cookies:字典或CookieJar,Request中的cookie(从HTTP协议中解析cookie)
    ​ 6)auth:元祖,支持HTTP认证功能
    ​ 7)files:字典类型,向服务器传输文件
    ​ 8)timeout:设定超时时间,秒为单位
    ​ 9)Proxies:字典类型,设定访问代理服务器,可以增加登录认证(访问服务器是的IP地址就是代理服务器的IP地址,有效隐藏用户爬起网页的原IP地址)
    ​ 10)allow_redirects:True/False,默认为True,重定向开关
    ​ 11)stream:True/False,默认为True,获取内容立即下载开关
    ​ 12)verify:True/False,默认为True,认证SSL证书开关
    ​ 13)cert:本地SSL证书路径
>>> kv={"key1":"value1","key2":"value2"}
>>> r=requests.request('GET','http://python123.io/ws',params=kv)
>>> print(r.url)
http://python123.io/ws?key1=value1&key2=value2


>>> kv={"key1":"value1","key2":"value2"}
>>> r=requests.request('POST','http://python123.io/ws',data=kv)
>>> body='主题内容'
>>> r=requests.request('POST','http://python123.io/ws',data=body)


>>> kv={"key1":"value1"}
>>> r=requests.request('POST','http://python123.io/ws',json=kv)


>>> hd={'user-agent':'Chrome/10'}
>>> r=requests.request('POST','http://python123.io/ws',headers=hd)


>>> fs={'file':open('data.xls','rb')}
>>> r=requests.request('POST','http://python123.io/ws',files=fs)


>>> pxs={'http':'http://user:pass@10.10.10.1:1234'
		 'https':'http://10.10.10.1:4321'}
>>> r=requests.request('GET','http://www.baidu.com',proxies=pxs)

  • requests.get(url,params-None,**kwargs)
    ​ url:拟获取页面的URL链接
    ​ params:URL中的额外参数,字典或字节流格式,可选
    ​ **kwags:12个控制访问的参数

  • requests.head(url,**kwags)
    ​ url:拟获取页面的URL链接
    ​ **kwags:13个控制访问的参数

  • requests.post(url,data=None,json=None,**kwags)
    ​ url:拟更新页面的URL链接
    ​ data:字典、字节序列或文件,Request的内容
    ​ json:JSON格式的数据,作为Request的内容
    ​ **kwags:11个控制访问的参数

  • requests.put(url,data=None,**kwags)
    ​ url:拟更新页面的URL链接
    ​ data:字典、字节序列或文件,Request的内容
    ​ **kwags:12个控制访问的参数

  • requests.patch(url,data=None,**kwags)
    ​ url:拟更新页面的URL链接
    ​ data:字典、字节序列或文件,Request的内容
    ​ **kwags:12个控制访问的参数

  • requests.delete(url,**kwags)
    ​ URL:拟删除页面的URL链接
    ​ **kwags:12个控制访问的参数

· 爬取网页框架

try:
	r=requests.get(url,timeout=30)
	r.raise_for_status()	#若状态码不是200,产生异常
	r,encoding=r.apparent_encoding
	return r.text
except:
	return "产生异常"


单元二:网络爬虫的“盗亦有道”

网络爬虫引发的问题

  • 网络爬虫的尺寸
小规模,数据量小;爬取速度不敏感;Requests库中规模,数据规模较大;爬取速度敏感;Scrapy库大规模,搜索引擎;爬取速度关键;定制开发
爬取网页,玩转网页爬取网站,爬取系列网站爬取全网
  • 网络爬虫的限制
    ​ 来源审查:判断User-Agent进行限制(技术能力要求)
    ​ 检查来访HTTP协议头的User-Agent域,只响应浏览器或友好爬虫的访问
    ​ 发布公告:Robots协议(告知所有爬虫网站的爬取策略,要求爬虫遵守)

Robots协议(网络爬虫排除标准)

  • 作用:网站告知网络爬虫哪些页面可以抓取,哪些不行

  • 形式:在网站的根目录下的robots.txt文件

    实例

  • 百度的关键词接口:http://www.baidu.com/s?wd=keyword
    ​ 360的关键词接口:http://www.so.com/s?q=keyword

实例代码链接:
https://blog.csdn.net/qq_44838702/article/details/104984489

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值