北京理工大学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)

    method:请求方式7种post/get/put等
​    url:拟获取页面的URL链接
​​    **kwags:13个控制访问的参数

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

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

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

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

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

(7)requests.delete(url,**kwags)
​    URL:拟删除页面的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格式错误,一般指URL格式不符合规范导致无法建立连接,通常会产生URLRequired错误。如果URL格式正确,可能触发Timeout类错误。

2

1 分

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

A

delete()

B

get()

C

patch()

D

head()

 正确答案 C 

 

数据推送(push model)一般指将数据发送出去的行为。在Requests库中,post()、put()、patch()都体现这种行为模式。

3

1 分

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

A

get()

B

delete()

C

post()

D

request()

 正确答案 D 

 

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

4

1 分

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

A

.get()

B

.head()

C

.post()

D

.push()

 正确答案 D 

 

Requests库共有7个主要方法:request()、get()、head()、post()、put()、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()获取数据,服务器作为数据提供方而不是接收方,更为安全。

10

1 分

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

A

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

B

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

C

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

D

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

 正确答案 C 

 

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

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

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值