Advertisement

北京理工大学MOOC爬虫笔记一(第0+1周)

阅读量:

一共四周

目录

一、开发工具及特点

二、requests库

三、网络爬虫的“盗亦有道

四、实例


一、开发工具及特点

二、requests库

demo1:

复制代码
 import requests

    
 r=requests.get('http://www.baidu.com')
    
 print(r.status_code)
    
 print(r.text)
    
 print(r.encoding)
    
 print("r.apparent_encoding:{}".format(r.apparent_encoding))
    
 r.encoding='utf-8'
    
 #不会出现乱码
    
 print(r.text)
复制代码
 #Requests head()方法

    
 r = requests.head('http://httpbin.org/get')
    
 print(r.headers)
复制代码
 #Requests post()方法,向URL POST一个字典 自动编码为form(表单)

    
 payload = {'key1': 'value1', 'key2': 'value2'}
    
 r = requests.post('http://httpbin.org/post', data = payload)
    
 print(r.text)
复制代码
 #向URL POST一个字符串自动编码为data

    
 r = requests.post('http://httpbin.org/post', data = 'ABC')
    
 print(r.text)
复制代码
 #Requests put()方法

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

demo2:爬虫的通用代码框架(捕获异常)

复制代码
 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))

demo3:

复制代码
 payload={"key1":"value1","key2":"value2"}

    
 r=requests.request('GET',"http://httpbin.org/post",params=payload)
    
 print(r.url) #http://httpbin.org/post?key1=value1&key2=value2

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

HTTP请求类型共有七种:POST、GET和PUT等;获取页面时需要指定其URL地址;**kwags: 13个用于控制访问的参数

(2)requests.get(url, params=None, **kwargs)
url:目标网页的URL地址
params:可能包含的其他信息(格式为字典或二进制数据的对象),可选
**kwargs:用于控制访问行为的关键字参数(共12个)

(3)requests.get(url, **kwargs) 其中: url:用于访问指定页面地址
**kwargs:用于配置访问权限的相关设置项

(4)requests.post(url,data=None,json=None,**kwags)
url:拟更新页面的目标URL
数据内容可为字典、二进制序列或文件;若采用JSON格式,则需以JSON形式传入;**kwags:包含11个用于控制访问的参数

(5)requests.put(url, data=None, **kwargs)
url:目标页面的URL链接
data:包含指定内容的数据块
**kwargs:用于控制访问的基本12个参数

(6)requests.patch(url=data=None, **kwargs)
目标URL地址:用于发送PATCH请求的目标网页地址
数据类型:包含字典、字节序列或文件等类型的请求内容
一系列控制访问行为的参数共有12个

(7)requests.delete(url,**kwags)
URL为指向待删除页面的链接。
**kwags为12个用于控制访问权限的参数。

三、网络爬虫的“盗亦有道

四、实例

demo1:亚马逊商品页面的爬取

复制代码
 import requests

    
  
    
 url = "https://www.amazon.cn/gp/product/B01M8L5Z3Y"
    
 try:
    
     # 重新定义 user-agent 内容,模拟浏览器
    
     kv = {'user-agent': 'Mozilla/5.0'}
    
     r = requests.get(url, headers = kv)
    
     r.raise_for_status()
    
     r.encoding = r.apparent_encoding
    
     # 编码方式为自动选择为apparent_encoding
    
     # r.encoding = '...' # 这个网页编码是...
    
     print(r.text[:1000]) # 前1000个字符
    
 except:
    
     print("爬取失败")

demo2:360关键字搜索提交

复制代码
 import requests

    
 #关键字Python
    
 keyword = 'Python' 
    
 kv = {'q':keyword}
    
 try:
    
     r = requests.get("http://www.so.com/s",params = kv)
    
     # 如果失败则返回错误,直接跳到 except
    
     r.raise_for_status()
    
     print(r.request.url)
    
     print(len(r.text))
    
 except:
    
     print("error")

demo3:

复制代码
 import requests

    
 url = 'https://user.ip138.com/login?refer='
    
  
    
 try:
    
     r = requests.get(url + 'https://user.ip138.com/ip/')
    
     r.raise_for_status()
    
     r.encoding = r.apparent_encoding
    
     print(r.text[-500:]) # 倒数500字节
    
 except:
    
     print("Fail")

1

1 分

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

A

requests.HTTPError

B

requests.URLRequired

C

requests.ConnectionTimeout

D

requests.TooManyRedirects

正确答案 B

常见的URL问题包括格式不规范的情况,这会导致服务器无法正常响应请求,并通常会抛出URLRequired异常。即使URL结构正确无误,在某些情况下也可能因网络连接超时而引发Timeout异常。

2

1 分

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

A

delete()

B

get()

C

patch()

D

head()

正确答案 C

Data push models typically refer to the process of transmitting data. Within the Requests library, functions like post(), put(), and patch() demonstrate this behavior pattern.

3

1 分

在Requests库中有哪些基础性函数?它们仅需一个基础性函数即可覆盖所有功能

A

get()

B

delete()

C

post()

D

request()

正确答案 D

该基础组件负责承担全部职责。该基础组件不仅实现了核心逻辑操作能力,并且全面负责其它辅助功能的实现。这些辅助功能仅作为它的包装实现。

4

1 分

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

A

.get()

B

.head()

C

.post()

D

.push()

正确答案 D

Request库包含7个主要功能:request( ) 用于发起请求,get( ) 获取资源,head( ) 进行 HEAD 请求,post( ) 发送 POST 请求,put( ) 进行 PUT 请求,patch( ) 进行 PATCH 请求以及 delete( ) 删除资源,其名称基本上与常见的HTTP操作一致

5

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

A

.status

B

.raise_for_status

C

.status_code

D

.headers

正确答案 C

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

6

1 分

在Requests库中对应从服务器返回HTTP协议头所推荐编码方式的字段是:...

A

.apparent_encoding

B

.text

C

.headers

D

.encoding

正确答案 D

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

7

1 分

在 Requests 库中, 以下涉及从 HTTP 响应头中推断编码机制的技术手段或方法之一是:

A

.text

B

.headers

C

.apparent_encoding

D

.encoding

正确答案 C

.apparent_encoding是基于内容分析得出的一种编码方案,在备用编码方案中通常被采用。

8

1 分

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

A

requests.URLRequired

B

requests.ConnectionError

C

requests.Timeout

D

requests.HTTPError

正确答案 B

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

9

1 分

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

A

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

B

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

C

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

D

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

正确答案 D

get()方法为何最为常用?主要原因在于受限于对push()、post()及patch等多种数据推送方式的限制。若设想允许任何人直接向服务器提交数据,则会带来巨大的潜在安全隐患。由此可见,在这种情况下,“通过get()获取数据使得服务器成为数据提供者而非接收者”的策略更为安全可靠。

get()方法为何最为常用?主要原因在于受限于对push()、post()及patch等多种数据推送方式的限制。若设想允许任何人直接向服务器提交数据,则会带来巨大的潜在安全隐患。由此可见,在这种情况下,“通过get()获取数据使得服务器成为数据提供者而非接收者”的策略更为安全可靠。

10

1 分

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

A

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

B

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

C

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

D

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

正确答案 C

普通个人电脑的数据若未实现网络连接且未将信息以URL格式暴露于Web服务器,则同样无法利用爬虫技术进行数据抓取

提醒自己即使能够迅速获取数据时,请注意以下事项:第一,在处理这些数据时需确保其知识产权得到合法保护;第二,在进行商业交易或出售行为时可能构成违法行为。

全部评论 (0)

还没有任何评论哟~