初识爬虫

@

一、requests库的安装

Win平台: win+R运行 cmd,执行

pip install requests

官方文档https://docs.python-requests.org/zh_CN/latest/
我的是已经安装好的

初识爬虫
安装成功后测试一下
import requests
r = requests.get("http://www.baidu.com")
print(r.text)

初识爬虫

二、requests库的七个主要方法及简单使用

(1)七个方法

方法 说明 requests.request() 构造一个请求,支撑以下各方法的基础方法 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

一般最常用到的方法是request(),get(),post()方法

(2)简单使用

1.request()方法

r = requests.request(method, url, **kwargs)  # 构造一个请求,支撑以下各方法的基础方法
  • method : 请求方式,对应get/put/post等7种
  • url : 拟获取页面的url链接
  • **kwargs: 控制访问的参数,共13个
  • method : 请求方式
    r = requests.request(‘GET’, url, kwargs)
    r = requests.request(‘HEAD’, url,
    kwargs)
    r = requests.request(‘POST’, url, kwargs)
    r = requests.request(‘PUT’, url,
    kwargs)
    r = requests.request(‘PATCH’, url, kwargs)
    r = requests.request(‘delete’, url,
    kwargs)
    r = requests.request(‘OPTIONS’, url, **kwargs)
  • params : 字典或字节序列,作为参数增加到url中

访问控制参数,也就是第三个参数 kwargs 示例

import requests
kv1 = {'key1': 'value1', 'key2': 'value2'}
rs1 = requests.request('GET', 'http://python123.io/ws',params = kv1)
print(rs1.text)
rs2 = requests.request('POST', 'http://python123.io/ws',data = kv1)
print(rs2.text)
kv2 = {'key1': 'value1'}
rs3 = requests.request('POST', 'http://python123.io/ws', json=kv2)
print(rs3.text)
hd = {'user‐agent': 'Chrome/10'}
rs4 = requests.request('POST', 'http://python123.io/ws', headers=hd)
rs5 = requests.request('post','',cookies = '字典或cookieJar')
rs6 = requests.request('post','',auth = '元组')
fs = {'file':open('data.xls','rd')}
rs7= requests.request('POST','',files = fs) # 传输文件
rs8 = requests.request('GET','http://www.baidu.com',timeout = 10)
pxs = { 'http': 'http://user:pass@10.10.10.1:1234','https': 'https://10.10.10.1:4321' }
rs9 = requests.request('GET','http://www.baidu.com',proxies = pxs)  # proxies 字典类型,设定访问代理服务器

参数 说明 files 字典类型,传输文件 timeout 设定超时时间,秒为单位 proxies 字典类型,设定访问代理服务器,可以增加登录认证 allow_redirects True/False,默认为True,重定向开关 stream True/False,默认为True,获取内容立即下载开关 verify True/False,默认为True,认证SSL证书开关 cert 本地SSL证书路径

2. get()方法

r = requests.get(url, params = None, **kwargs)
r = requests.get(url) # 获取HTML网页的主要方法,对应于HTTP的GET
r = requests.delete(url)
print(r.url)

参数 说明 url 拟获取页面的url链接 params url 中的额外参数,字典或字节流格式,可选 kwargs 12个控制访问参数
3.head()方法**

r = requests.head('http://httpbin.org/get')     # 获取HTML网页头信息的方法,对应于HTTP的HEAD
print(r.headers)

4.post()方法

r = requests.post(url, data=None, json=None, **kwargs)

参数 说明 url 拟更新页面的url链接 data 字典、字节序列或文件,Request的内容 json JSON格式的数据,Request的内容
示例

payload = {'key1':'value1','key2':'value2'}
r = requests.post('http://httpbin.org/post',data=payload) # 向HTML网页提交POST请求的方法,对应于HTTP的POST
r = requests.post('http://httpbin.org/post',data='abc')
print(r4.text)

5.put()方法

r = requests.put(url, data=None, **kwargs)
r = requests.put('http://httpbin.org/put',data=payload) # 向HTML网页提交PUT请求的方法,对应于HTTP的PUT
print(r.text)
</code></pre>
<p><strong>6.patch()方法</strong></p>
<pre><code class="language-python">r = requests.patch(url) # 向HTML网页提交局部修改请求,对应于HTTP的PATCH

7.delete()方法

r = requests.delete(url, **kwargs)
r = requests.delete(url)   # 向HTML页面提交删除请求,对应于HTTP的DELETE

url : 拟删除页面的url链接

三、requests库的两个重要对象

Response和Request

(1)Request

  • r == response 返回一个包含服务器资源的response对象
  • request 构造一个向服务器请求资源的request对象
  • 从请求到响应的过程

(2)Response对象

Response对象包含服务器返回的所有信息,也包含请求的Request信息

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

初识爬虫
有时打印的网页内容会乱码,如下所示
[En]

Sometimes the content of the printed web page is garbled, like this

初识爬虫
所以需要理解Response的编码

r.encoding 从HTTP header中猜测的响应内容编码方式 r.apparent_encoding 从内容中分析出的响应内容编码方式(备选编码方式)

1)r.encoding:如果header中不存在charset,则认为编码为ISO‐8859‐1
2)r.text根据r.encoding显示网页内容
3)r.apparent_encoding:根据网页内容分析出的编码方式,可以看作是 r.encoding的备选

当我们把编码方式改变后打印出来的内容为
有以下l两种方式

r.encoding = 'utf-8'   #直接改变编码
r.encoding = r.apparent_encoding  #用r.encoding的备选

初识爬虫

四、requests库的异常(Exception)

网络连接是有风险的,异常处理非常重要。

[En]

Network connection is risky and exception handling is very important.

(1) Requests异常

异常 说明 requests.ConnectionError 网络连接错误异常,如DNS查询失败、拒绝连接等 requests.HTTPError HTTP错误异常 requests.URLRequired URL缺失异常 requests.TooManyRedirects 超过最大重定向次数,产生重定向异常 requests.ConnectTimeout 连接远程服务器超时异常 requests.Timeout 请求URL超时,产生超时异常 (2)Response异常 r.raise_for_status() 如果不是200,产生异常 requests.HTTPError — — r.raise_for_status()在方法内部判断r.status_code是否等于200,不需要 增加额外的if语句,该语句便于利用try‐except进行异常处理

五、HTTP协议

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

  • HTTP协议采用URL作为定位网络资源的标识,URL格式如下:
    http://host[:port][path]
  • host: 合法的Internet主机域名或IP地址
  • port: 端口号,缺省端口为80
  • path: 请求资源的路径

URL是通过HTTP协议存取资源的Internet路径,一个URL对应一个数据资源

(2)HTTP 对资源的操作

初识爬虫
通过URL和命令管理资源,操作独立无状态,网络通道及服务器成为了黑盒子

6.抓取网页的通用代码框架

[En]

6. Crawl the general code framework of web pages

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 = input('请输入url地址:')
    print(getHTMLText(url))

初识爬虫

七、网络爬虫的限制

Robots协议

Robots协议的使用

网络爬虫:自动或人工识别robots.txt,再进行内容爬取
约束性:Robots协议是建议但非约束性,网络爬虫可以不遵守,但存在法律风险

小提示:
爬虫作为一种计算机技术决定了其中立性,爬虫本身不受法律的禁止,如果爬虫收集公共数据是可以的。当然,操作不当可能会带来违法甚至犯罪的风险。因此,有必要合理使用,规范爬行。

[En]

Crawler as a computer technology determines its neutrality, the crawler itself is not prohibited by law, if the crawler collects public data is OK. Of course, improper operation may involve the risk of breaking the law or even crime. Therefore, it is necessary to use it reasonably and standardize crawling.

Original: https://www.cnblogs.com/lang12/p/15377703.html
Author: Aurora*
Title: 初识爬虫

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/522703/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球