2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > MOOC《Python网络爬虫和信息提取》(第11次)网络爬虫之规则 (第1周)

MOOC《Python网络爬虫和信息提取》(第11次)网络爬虫之规则 (第1周)

时间:2024-06-29 22:42:33

相关推荐

MOOC《Python网络爬虫和信息提取》(第11次)网络爬虫之规则 (第1周)

MOOC《Python网络爬虫和信息提取》(第11次)

网络爬虫之规则 21.07.14

学习目标

掌握定向网络爬取和页面解析的基本能力Requests库robots.txt 盗亦有道5个实战项目Projects

单元1:Requests库入门

文章目录

网络爬虫之规则 21.07.14学习目标 单元1:Requests库入门1、pycharm安装:2、Requests库2.1 Requests库7个主要方法2.2 Response对象的属性2.3 编码方式 3、爬取网页的通用代码框架3.1 Requests库的异常3.2 爬取网页的通用代码框架 4、 HTTP协议HTTP协议对资源的操作 5、Requests库的主要方法解析6、练习 单元2:网络爬虫的盗亦有道1、网络爬虫引发的问题1.1网络爬虫的尺寸1.2 存在隐患1.3 网络爬虫的限制 2、Robots协议3、Robots的遵守方式 单元3:Requests库网络爬虫实例实例1:京东商品页面的提取实例2:亚马逊商品页面的提取实例3:百度360搜索关键词提交实例4:网络图片的爬取和存储实例5:IP地址对属地的自动查询 测验1:PYTHON网络爬虫之规则(第一周)

1、pycharm安装:

打开设置->选择Project的Python interpreter->点击添加

输入requests->点击左下角install,等待片刻,安装完毕

验证安装成功:

import requestsr = requests.get("")var = r.status_code # 200print(var)r.encoding = 'urf-8'print(r.text)

输出结果:

2、Requests库

Requests库的2个重要对象

Response:一个class类

Request:一个基本方法

2.1 Requests库7个主要方法

requests.request() # 构造一个请求,支撑以下各方法的基础方法requests.get() # 获取HTML网页的主要方法,对应于HTTP的GETrequests.head() # 获取HTML网页头信息的方法,对应于HTTP的HEADrequests.post() # 向HTML网页提交POST请求的方法,对应于HTTP的POSTrequests.put() # 向HTML网页提交PUT请求的方法,对应于HTTP的PUTrequests.patch() # 向HTML网页提交局部修改请求,对应于HTTP的PATCHrequests.delete() # 向HTML页面提交删除请求,对应于HTTP的DELETE

2.2 Response对象的属性

r.status_code#HTTP请求的返回状态,200表示连接成功,404表示失败r.text# HTTP响应内容的字符串形式,即,url对应的页面内容r.header # 展现HTTP响应内容的头部内容r.encoding# 从HTTP header中猜测的响应内容编码方式r.apparent_encoding# 从内容中分析出的响应内容编码方式(备选编码方式)r.content# HTTP响应内容的二进制形式

2.3 编码方式

import requests# 查看编码方式# r.encoding 从HTTP header 中猜测的响应内容编码方式# r.apparent_coding 从 内容 中分析响应内容编码方式(备选编码方式)# 推荐用 apparent_codingr = requests.get("")print(r.status_code)print(r.text)print(r.encoding) # 编码为 ISO-8859-1,不能解析中文print(r.apparent_encoding)r.encoding = 'urf-8' # 部分内容转换成中文print(r.text)

3、爬取网页的通用代码框架

3.1 Requests库的异常

3.2 爬取网页的通用代码框架

import requestsdef getHTMText (ur1) :try :r = requests.get (ur1, timeout=30)r.raise_for_status () #如果状态不是200,引发HTTPError异常r.encoding =r.apparent_encodingreturn r.textexcept:return "产生异常"if __name__ =="__main__":# url1 = ""url1 = ""print(getHTMText(url1))

4、 HTTP协议

HTTP,Hypertext Transfer Protocol,超文本传输协议。

HTTP是一个基于“请求与响应”模式的、无状态的应用层协议。

–用户发起请求,服务器做相关响应,就是“请求与响应”的模式;

–无状态是指第一次请求和第二次请求之间并没有相关的关联;

–应用层协议指的是该协议工作在TCP协议之上。

HTTP协议采用URL作为定位网络资源的标识。

–URL格式 http//:host [:port] [path]

host:合法的Internet主机域名或P地址

port:端号,缺省端口为80

path:请求资源的路径

HTTP协议对资源的操作

获取:GET,HEAD

修改:POST,PUT,PATCH,DELETE

–与requests的七个方法相对应

5、Requests库的主要方法解析

requests.request(method, url,**kwargs)

–method:请求方式,对应get/put/post等7种(与封装方法一致)

–url:拟获取页面的url链接

–kwargs:控制访问的参数,共13个

params:字典或字节序列,作为参数增加到url中data: 字典、字节序列或文件对象,作为Request的内容json: JSON格式的数据,作为Request的内容headers:字典,HTTP定制头cookies:字典或CookieJar,Request中的cookieauthor: 元组,支持HTTP认证功能file: 字典类型,传输文件timeout:设定超时时间,秒为单位proxies:字典类型,设定访问代理服务其,可以增加登录认证allow_redirects: True/False,默认为True,重定向开关,表示允不允许对URL进行重定向stream: True/False,默认为True,获取内容立即下载开关(默认下载)verify: True/False,默认为True,认证SSL证书开关cert: 本地SSL证书路径

requests.get(url,params=None,**kwargs)requests.head(url,**kwargs)requests.post(url,data=None,json=None,**kwargs)requests.put(url,data=None,**kwargs)requests.patch(url,data=None,**kwargs)requests.delete(url,**kwargs)

6、练习

'''题目:请编写一个小程序,“任意”找个url,测试一下成功爬取100次网页的时间。(某些网站对于连续爬取页面将采取屏蔽IP的策略,所以,要避开这类网站。'''# 参考代码import requestsimport timedef getHTMLText(url):try:r = requests.get(url, timeout=30)r.raise_for_status() # 如果状态不是200,引发HTTPError异常r.encoding = r.apparent_encodingreturn Trueexcept:return "异常"if __name__ == "__main__":url = "/"# url = ""# url = "/"start_time = time.time()n = input("重复多少次:")for i in range(eval(n)):if getHTMLText(url) == False:print("产生了异常")exit()end_time = time.time()timeNow = end_time - start_timeprint("爬取{}次网页使用时间:{:.2f}秒".format(n, timeNow))

单元2:网络爬虫的盗亦有道

1、网络爬虫引发的问题

1.1网络爬虫的尺寸

小规模,数据量小,爬取速度不敏感,Requestsku,用于爬取网页、玩转网页;中规模,数据规模较大,爬取速度敏感,Scrapy库,用于爬取网站、爬去系列网站;大规模,搜索引擎,爬取速度关键,定制开发,爬取全网

1.2 存在隐患

网络爬虫的“骚扰”网络爬虫的法律风险网络爬虫泄露隐私

1.3 网络爬虫的限制

来源审查:判断HTTP协议头的User-Agent域发布公告:Robots协议,告知所有爬取网站的爬虫策略

2、Robots协议

全称:Robots Exclusion Standard 网络爬虫排除标准

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

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

Robot协议基本语法

# 注释,通配符 '*' 代表所有; '/' 代表根目录User-agent:*# 指明针对哪些爬虫Disallow:/# 指明哪些目录不被允许

3、Robots的遵守方式

Robots协议的使用

网络爬虫:自动或人工识别robots.txt,再进行内容爬取

约束性:Robots协议是建议但非约束性的,可以不遵守,但存在法律风险

类人类行为(访问量很少)可以不参考Robots协议,但不能进行商业用途

单元3:Requests库网络爬虫实例

实例1:京东商品页面的提取

import requests# 商品页面需要用户登录,改用京东首页url = "/" # 网址,这里是京东首页的网址try:r=requests.get(url)# 访问print(r.status_code) # 输出访问状态,200表示访问成功print(r.encoding)# 查看页面的编码print(r.apparent_encoding)print(r.text[:1000]) # 打印页面信息except:print("爬取失败")

实例2:亚马逊商品页面的提取

import requestsurl = "/gp/product/B01M8L5Z3Y"# 网址try:kv = {'User-Agent': 'Mozilla/5.0'} # 构建键值对,以改变HTTP协议的头部r=requests.get(url,headers = kv) # 改变头文件进行访问print(r.status_code) # 输出访问状态,200表示访问成功r.raise_for_status()# 如果状态不是200,引发HTTPError异常r.encoding = r.apparent_encoding # 改成便于阅读的编码print(r.request.headers) # 查看HTTP协议的头部print(r.text[:1000]) # 打印页面信息except:print("爬取失败")

实例3:百度360搜索关键词提交

'''百度的关键词接口:http://www,/s?wd=keyword360的关键词接口:/s?q=keyword'''import requestsurl = "/s"# 网址keyword = 'python'try:kv = {'wd':keyword}r = requests.get(url,params=kv) # 增加参数进行访问print(r.request.url)r.raise_for_status() # 如果状态不是200,引发HTTPError异常r.encoding = r.apparent_encoding # 改成便于阅读的编码print(len(r.text))# 打印页面文本的长度print(r.text[:1000]) # 打印页面信息except:print("爬取失败")

实例4:网络图片的爬取和存储

'''网络图片链接的格式:/picture.jpg'''import requestsimport osurl = "/ga/M00/46/FC/wKgBy1iv0WmAaXa1AE7LkZQs2kI077.tub.jpg"# 图片网址root = "D:\\" # 保存在D盘path = root + url.split('/')[-1] # split分段,提取图片的文件名try:if not os.path.exists(root):os.mkdir(root)if not os.path.exists(path):r = requests.get(url) # 访问with open(path,'wb') as f: # 打开文件f.write(r.content)# 保存f.close()# 关闭文件print('文件保存成功')else:print('文件保存失败')except:print("爬取失败")

实例5:IP地址对属地的自动查询

'''IP查询: 提交IP后的链接:/asp?ip=ipaddress/?ip=202.204.80.112 中国站长之家IP查询地址'''import requestsurl = "/?ip=" # ip查询网址前缀ip = '202.204.80.112' # 查询ipurlip = url+ip# ip查询链接try:r = requests.get(urlip)print(r.status_code)r.raise_for_status()r.encoding = r.apparent_encodingprint(r.text[:-500])except:print("爬取失败")

测验1:PYTHON网络爬虫之规则(第一周)

# 1、Requests库中,下面哪个最可能是由于URL格式错误造成异常?‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬

A、requests.URLRequired

B、requests.HTTPError

C、requests.TooManyRedirects

D、requests.ConnectionTimeout

正确答案 A

URL格式错误,一般指URL格式不符合规范导致无法建立连接,通常会产生URLRequired错误。如果URL格式正确,可能触发Timeout类错误。

# 2、在Requests库中,体现推送数据操作的函数是:‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬

A、patch()

B、get()

C、head()

D、delete()

正确答案 A

数据推送(push model)一般指将数据发送出去的行为。

在Requests库中,post()、put()、patch()都体现这种行为模式。

# 3、在Requests库中,以下哪个函数是基础性函数?即,只需要一个函数即可完成全部功能。‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬

A、get()

B、request()

C、post()

D、delete()

正确答案 B

request()是其他所有函数的基础函数,完成所有功能,其它函数只是它的一种封装形式。

# 4、以下选项不是Python Requests库提供方法的是:‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬

A、.head()

B、.post()

C、.get()

D、.push()

正确答案 D

Requests库共有7个主要方法:request()、get()、head()、post()、put()、patch()、delete(),名字基本与HTTP的操作相同。

# 5、Requests库中,检查Response对象返回是否成功的状态属性是:‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬

A、.headers

B、.status_code

C、.raise_for_status

D、.status

正确答案 B

r.status_code,200表示连接成功,404表示失败。

# 6、Requests库中,以下代表从服务器返回HTTP协议头所推荐编码方式的属性是:‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬

A、.text

B、.apparent_encoding

C、.encoding

D、.headers

正确答案 C

.encoding是从HTTP header中猜测获得的响应内容编码方式。

# 7、‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬Requests库中,以下代表从服务器返回HTTP协议内容部分猜测获得编码方式的属性是:‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬

A、.encoding

B、.headers

C、.text

D、.apparent_encoding

正确答案 D

.apparent_encoding是从内容中分析出的编码方式,一般作为备选编码方式。

# 8、Requests库中,下面哪个是由于DNS查询失败造成的获取URL异常?‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬

A、requests.HTTPError

B、requests.URLRequired

C、requests.ConnectionError

D、requests.Timeout

正确答案 C

DNS失败将造成网络连接错误,因此产生连接错误异常。

# 9、Requests库中的get()方法最常用,下面哪个说法正确?‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬

A、HTTP协议中GET方法应用最广泛,所以,get()方法最常用。

B、网络爬虫主要进行信息获取,所以,get()方法最常用。

C、get()方法是其它方法的基础,所以最常用。

D、服务器因为安全原因对其他方法进行限制,所以,get()方法最常用。

正确答案 D

get()方法最常用的原因在于服务器端对push()、post()、patch()等数据推送的限制,试想,如果允许大家向服务器提交数据,将带来无穷无尽的安全隐患。因此,通过get()获取数据,服务器作为数据提供方而不是接收方,更为安全。

# 10、下面哪些功能网络爬虫做不到?‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬

A、分析教务系统网络接口,用程序在网上抢最热门的课。

B、爬取网络公开的用户信息,并汇总出售。

C、持续关注某个人的微博或朋友圈,自动为新发布的内容点赞。

D、爬取某个人电脑中的数据和文件。

正确答案 D

个人电脑中数据没有联网且没有通过Web服务器以URL形式被网络访问,则不能用爬虫获取。

切记,及时能爬取数据,数据的知识产权仍然受保护,商业获利(出售)将涉嫌违法。

资料来源:

Python网络爬虫与信息提取_北京理工大学_中国大学MOOC(慕课) /course/BIT-1001870001

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。