Python爬虫:数据获取requests

1. 基本用法

1.1. 安装requests库

pip3 install requests

1.2. 发送HTTP请求

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

1.3. 发送GET请求

requests.get(url, params=None, **kwargs)

1.4. 发送POST请求

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

1.5. 发送PUT请求

requests.put(url, data=None, **kwargs)

1.6. 发送DELETE请求

requests.delete(url, **kwargs)

1.7. 发送HEAD请求

requests.head(url, **kwargs)

1.8. 创建一个会话对象

requests.session()

1.9. 获取重定向目标

requests.get_redirect_target(response)

1.10. 发送PATCH请求

requests.patch(url, data=None, **kwargs)

扫一扫欢迎关注,一起学习!

1.11. response返回

通过response对象的各种属性和方法来查看响应的各项信息

  1. .status_code:返回响应状态码,例如200表示请求成功,404表示请求的资源不存在等;
  2. .headers:返回响应头信息,是一个字典类型;
  3. .text:返回响应的内容,是一个字符串类型;
  4. .content:返回响应的二进制内容,是一个bytes类型;
  5. .cookies:返回响应的cookie信息,是一个字典类型;
  6. .json():返回响应的json格式数据,如果响应内容不是json格式,则会抛出异常;
  7. .encoding:返回响应内容的编码格式;
  8. .url:返回响应的URL地址;
  9. .history:返回请求历史,是一个列表类型,其中每个元素都是一个response对象。

2. GET与POST请求方式

GET和POST是HTTP协议中最常用的两种请求方法,它们在参数传递、安全性、缓存以及URL长度上有所区别。具体分析如下:

  1. 参数传递:GET请求将参数包含在URL中,而POST请求通过request body传递参数。这意味着GET请求的参数会直接显示在浏览器的地址栏中,而POST请求的参数不会显示。
  2. 安全性:POST请求通常被认为比GET请求更安全,因为POST请求的数据不会像GET请求那样显示在URL中,从而减少了敏感信息泄露的风险。
  3. 缓存:GET请求的结果可以被浏览器缓存,这使得重复访问同一资源时可以更快地加载页面。而POST请求通常不会被缓存,因为每次提交的数据可能不同,缓存可能会导致数据不一致。
  4. URL长度:由于GET请求的参数是附加在URL上的,所以URL的长度受到限制。如果参数过多或过长,可能会导致服务器拒绝处理请求。POST请求则没有这个问题,因为参数是在请求体中发送的。

总的来说,GET请求适合用于获取数据,而POST请求适合用于提交数据。在实际开发中,选择使用哪种请求方法取决于具体的需求和场景。

2.1. GET

import requests


url = 'https://www.baidu.com/s'
headers = {
    'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36'
}
# 方式1
rep = requests.get('https://www.baidu.com/s?ie=UTF-8&wd=中国', headers=headers)

# 方式2
params = {
    'ie' : 'UTF-8',
    'wd' : '中国'
}
rep = requests.get(url,params=params ,headers=headers)

print(rep.text)

2.2. POST

import requests

url = 'https://fanyi.qq.com/api/translate'
data = {
    'source': 'auto',
    'target': 'en',
    'sourceText': '中国'
}
headers = {
    'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36'
}
rep = requests.post(url, data=data, headers=headers)
print(rep.text)

import requests

url = 'https://fanyi.qq.com/api/translate'
data = {
    'source': 'auto',
    'target': 'en',
    'sourceText': '中国'
}
headers = {
    'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36'
}
rep = requests.post(url, data=data, headers=headers)
print(rep.text)

{
  "translate": {
    "errCode": 0,
    "errMsg": "",
    "source": "zh",
    "target": "en",
    "records": [
      {
        "sourceText": "中国",
        "targetText": "China"
      }
    ],
    "full": true,
    "options": {}
  },
  "dict": null,
  "suggest": null,
  "errCode": 0,
  "errMsg": "ok"
}

2.3. 小结

  1. get请求中带的参数为params,post使用的参数为data。

  1. 运行后返回为空,一般被限制了User-Agent。

3. 请求头headers

Headers在HTTP请求中扮演着重要的角色,它们为服务器提供额外的信息,帮助服务器正确处理请求。例如,通过设置User-Agent可以模拟浏览器行为,避免被网站识别为爬虫并封锁。

User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.82 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Accept-Encoding: gzip, deflate, br
Accept-Language: en-US,en;q=0.9
Connection: keep-alive
Cookie: PHPSESSID=d1s5jnrl3kjhg5iuj65t54rd5

以下是一些常见的HTTP请求头字段及其含义:

3.1. User-Agent

表明发送请求的用户代理(通常是浏览器)的信息。服务器通过这个字段来识别客户端使用的操作系统、浏览器类型和版本等。

3.2. Accept

告诉服务器客户端能够接受哪些类型的媒体,这样服务器可以根据客户端的偏好返回相应的内容。例如,Accept: text/html 表示客户端希望接收HTML格式的响应。

3.3. Content-Type

当客户端需要发送数据给服务器时,这个字段指定数据的MIME类型。例如,Content-Type: application/json 表示客户端发送的是JSON格式的数据。

3.4. Accept-Encoding

表示客户端能够解码哪些编码方式的数据。这通常用于指定客户端是否支持压缩编码,如Accept-Encoding: gzip。

3.5. Cookie

用于存储会话信息或其他持久性数据。服务器可以通过设置Cookie来维护客户端的状态。

3.6. Authorization

用于提供认证信息,如Bearer tokens或HTTP基本认证的用户名和密码。

3.7. Connection

控制是否关闭网络连接,或者是否使用持久连接。例如,Connection: keep-alive 表示使用持久连接。

你可能感兴趣的:(Python,爬虫,python,爬虫,开发语言)