#Python爬虫(一)##太原理工大学机器人团队20天学习打卡day12

今日主讲HTTP协议,requests库,信息爬取与robots
网页爬虫是对网页内容的获取,所以说学习爬虫,我们先来看一下HTTP协议
HTTP , Hypertext Transfer Protocol ,超文本传输协议
HTTP是一个基于“请求与响应”模式的、无状态(第一次请求与第二次请求无关联)的应用层协议
HTTP协议采用URL作为定位网络资源的标识, URL格式如下:
http: //host[ : port][path]
host:合法的Internet主机域名或IP地址
port:端口号,缺省端口为80
path:请求资源的路径
如:http://www2017.tyut.edu.cn(我们太理的官网)
HTTP URL的理解:
URL是通过HTTP协议存取资源的Internet路径,一个URL对应一个数据资源,URL就相当于我们电脑中文件的路径,只不过这个文件是在Internet上
HTTP对资源的操作:
在这里插入图片描述在这里插入图片描述通过URL和命令管理资源,操作独立无状态,网络通道及服务器成为了黑盒子
假设URL位置有一组数据UserInfo ,包括UserID、UserName等20个字段,需求:用户修改了UserName ,其他不变

  • 采用PATCH ,仅向URL提交UserName的局部更新请求
  • 采用PUT ,必须将所有20个字段一并提交到URL ,未提交字段被删除

PATCH的最主要好处:节省网络带宽
网络爬虫
爬取网页内容需要requests库
在这里插入图片描述在这里插入图片描述在这里插入图片描述r. encoding :从HTTP header中猜测的响应内容编码方式,如果header中不存在charset ,则认为编码为IS0-8859-1,r. text根据r . encoding显示网页内容
r. apparent_ encoding:从内容中分析出的响应内容编码方式(备选编码方式),根据网页内容分析出的编码方式可以看作是r . encoding的备选
在这里插入图片描述
r.raise_ for_ status( ):如果不是200 ,产生异requests.HTTPError
在方法内部判断r.status_ code是否等于200 ,不需要增加额外的if语句,该语句便于利用try- except进行异常处理
在这里插入图片描述requests.request (method,url,kwargs )
●method :请求方式,对应get/ put/post等7种
●url:拟获取页面的ur1链接
kwargs:控制访问的参数,共13个
在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述爬取网页的通用代码框架

try:
	r= requests.get(url, timeout= =30)
	r.raise_for_status ()
	r.encoding = r.apparent encoding
	return r.text
except:
	return "产生异常"

网络爬虫可能引发性能骚乱,法律问题,隐私泄露等问题,故一些网站会对爬虫进行限制
●来源审查:判断User- Agent进行限制,检查来访HTTP协议头的User-Agent域,只响应浏览器或友好爬虫的访问
●发布公告: Robots协议,告知所有爬虫网站的爬取策略,要求爬虫遵守
Robots协议基本语法
#注释,*代表所有,/代表根目录
User- agent:
Disallow: /
在这里插入图片描述网络爬虫“盗亦有道”尽量遵循robots法则
下面我们去爬取亚马逊商品页面
在这里插入图片描述发现出现了错误,我们用headers看一下我们的http定制头
在这里插入图片描述我们忠诚地告诉了亚马逊我们是来爬虫的,呃呃呃,被其限制了,所以我们需要改变我们的User-Agent
在这里插入图片描述Mozilla/5.0,是很标准的浏览器身份标识字段,用来爬取比较通用
上述问题的全代码

import requests
ur1="https: / /www.amazon.cn/gp/product/B01M8L5Z3Y"
try:
	kv={ 'user-agent':'Mozilla/5.0'}
	r=requests.get(ur1,headers=kv)
	r.raise_for_status ()
	r.encoding=r.apparent_encoding
	print(r.text[1000:2000])
exceptprint ("爬取失败")

搜索引擎关键词提交接口
百度的关键词接口:http: / /www.baidu.com/ s?wd=keyword
360的关键词接口:http: / /www.so.com/ s?q=keyword
百度搜索全代码

import requests
keyword="Python"
try:
	kv={'wd':keyword}
	r=requests.get ("http://www.baidu.com/s",params=kv)
	print (r.request.ur1)
	r.raise_for_status ()
	print(len(r.text))
except:
	print("爬取失败")

图片爬取

import requests
import os
url="https://地址/名称.jpg"
root="D: //pics//"
path=root+url.split('') [-1]
#使得我们保存的图片的名称就是原图的名称
try :
	if not os.path.exists (root) :
		os.mkdir(root)
	if not os.path. exists (path) :
		r=requests.get (ur1)
		with open (path'wb') as f:
		f.write(r.content)
		#图片是以二进制保存的
		f. close ()
		print("文件保存成功")
	else :
		print("文件已存在")
except:
	print ("爬取失败")
发布了13 篇原创文章 · 获赞 30 · 访问量 4973

猜你喜欢

转载自blog.csdn.net/weixin_46424753/article/details/104866738