05.爬虫---urllib与requests请求实战(GET)

05.urllib与Requests请求实战GET

GET请求
Python中的GET请求也是HTTP协议中的一种请求方法,用于向服务器请求数据。与POST请求不同,GET请求将数据以查询字符串的形式附加在URL后面,而不是封装在请求体中。通常情况下,GET请求用于向服务器请求某个资源,比如获取网页、图片、视频等。

1.Urllib模块

Urllib官方文档 https://docs.python.org/3/library/urllib.request.html
urllib 是Python的标准库,用于发送HTTP请求和处理响应。它提供了urlopenRequest 等函数和类来与网络资源进行交互。urllib能够处理的基本请求包括GET、POST、PUT、DELETE等,同时也支持设置请求头、请求体、处理cookies等高级功能,但其API相对较为底层,使用起来比较繁琐。urllib在处理请求时,如果发生错误,可以通过urllib.error模块来捕获异常。
内置4个模块:

  • request: http的请求模块,传入UPL及额外的参数,就模拟发送请求
  • error 异常处理模块,确保程序不会意外终止
  • parse : 一个工具模块,提供了许多URL处理方法。
  • robotparser : 用来识别robots.txt文件,判断那些网站可以爬

使用示例:
urllib 是 python 内置模块 无需安装,直接引用即可:

py 复制代码
import urllib.request

# 发送GET请求
response = urllib.request.urlopen('https://www.baidu.com')
data = response.read()
print(data.decode('utf-8'))

2.Requests模块

Requests 官方文档 https://docs.python-requests.org/

Requests 是一个第三方库,提供了一个更简洁、易用的API来发送HTTP请求。它内置了丰富功能,如会话对象、请求重定向、SSL验证、代理支持等,使得它成为了一个非常流行的网络请求库。Requests的API设计遵循了Pythonic原则,使得它更加容易学习和使用。其性能通常比urllib好,因为它提供了连接池管理、会话对象复用等优化措施
Requests是一个第三方库 首先需要安装requests模块 点击终端,输入

bash 复制代码
pip install requests

如果安装的话可以通过 镜像源安装 镜像源可参考 8个国内镜像源

bash 复制代码
pip install requests -i https://mirrors.aliyun.com/pypi/simple/

使用示例:

py 复制代码
import requests

# 发送GET请求
response = requests.get('https://www.baidu.com')
print(response.text)

3.对比

特性 urllib Requests
安装 无需安装,Python自带 需要安装,pip install requests
设计 较底层,需要手动处理更多细节 高阶,提供完整请求方法
功能 基本请求、cookies处理等 全面,包括会话管理、请求重定向等
性能 一般 较好,因为有连接池等优化
易用性 较难上手 易于上手和学习

4.实战

https://movie.douban.com/ 为例

  • urllib GET 请求
py 复制代码
import urllib.request

# 发送GET请求
response = urllib.request.urlopen('https://movie.douban.com/')
data = response.read()
print(data.decode('utf-8'))

# 发送POST请求
data = {'key': 'value'}
response = urllib.request.urlopen('https://www.baidu.com', data=data)
print(response.read().decode('utf-8'))

喔霍,没有想象中的顺利,报错了 urllib.error.HTTPError: HTTP Error 418:

可参考 HTTP响应状态码一览表

HTTP状态码418是一个非标准的HTTP状态码,被定义为"I'm a teapot"(我是一个茶壶)。这个状态码源自1998年的一个愚人节笑话,被写入了RFC 2324,Hyper Text Coffee Pot Control Protocol(超文本咖啡壶控制协议)。在实际的Web开发中,有些网站可能会使用这个状态码作为反爬虫策略的一部分。当服务器返回418状态码时,可能是因为服务器认为你的请求是一个爬虫,而不是一个正常的用户请求。

解决方法:

  1. 修改你的请求头,使其看起来更像一个正常的用户(也就是模拟浏览器去发出请求)。

请求头对爬虫来说,就好像一个面具,去模仿人去浏览网站,就不会被网站发现,也可以理解为打开网站的钥匙,上面我们知道,数据在链接中,但是我们申请后,返回状态码是418,请求失败,所有我们现在戴上面具,或者说,拿着钥匙再去申请,看看能不能成功打开。

  • 定义一个确定的User-Agent
py 复制代码
req.add_header("User-Agent","Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.221 Safari/537.36 SE 2.X MetaSr 1.0")

打开电脑浏览器----》审查元素---》网络---》点开一个请求---》User-Agent

  • 随机User-Agent
py 复制代码
from fake_useragent import UserAgent
req.add_header('User-Agent',UserAgent().chrome)
  1. 如果网站使用了cookie来跟踪用户,你可能需要在你的爬虫中处理cookie。(设置了User-Agent还未解决的情况下考虑这种情况
  2. 有些网站可能会检查请求之间的时间间隔,如果请求过于频繁,可能会被认为是爬虫。在这种情况下,你可以在你的请求之间添加一些延迟。
py 复制代码
time.sleep(random.uniform(0, 0.02))#具体时间可以自行测试

设置请求头后能正常访问的代码:

py 复制代码
from urllib import request

url = 'https://movie.douban.com/'
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.5735.289 Safari/537.36'
}
req = request.Request(url=url, data=None, headers=headers)
response = request.urlopen(req)
print(response.read().decode('utf-8'))

结果:

  • requests GET 请求
py 复制代码
import requests
url = 'https://movie.douban.com/'
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.5735.289 Safari/537.36'
}
#发送GET请求
response = requests.get(url, headers=headers)
print(response.text)

只是用法不同,结果返回是一样的 如上图所示

相关推荐
一个天蝎座 白勺 程序猿3 小时前
Python爬虫(3)HTML核心技巧:从零掌握class与id选择器,精准定位网页元素
前端·爬虫·html
jiaoxingk3 小时前
有关爬虫中数据库的封装——单线程爬虫
数据库·爬虫·python·mysql
知识中的海王16 小时前
猿人学web端爬虫攻防大赛赛题第15题——备周则意怠-常见则不疑
爬虫·python
小白学大数据16 小时前
如何避免爬虫因Cookie过期导致登录失效
开发语言·爬虫·python·scrapy
奋斗者1号19 小时前
《Crawl4AI 爬虫工具部署配置全攻略》
网络·爬虫
Python×CATIA工业智造1 天前
爬虫技术入门:基本原理、数据抓取与动态页面处理
爬虫·python·pycharm
K哥爬虫1 天前
【验证码逆向专栏】某采购网,360 磐云盾、文字点选验证码逆向分析
爬虫
一个天蝎座 白勺 程序猿1 天前
Python爬虫(8)Python数据存储实战:JSON文件读写与复杂结构化数据处理指南
爬虫·python·json
Star abuse1 天前
Python爬虫课程实验指导书
开发语言·爬虫·python
Luck_ff08102 天前
【Python爬虫详解】第四篇:使用解析库提取网页数据——BeautifuSoup
开发语言·爬虫·python