urllib与request的常见用法解析与案例

本文深入解析了urllib和requests两个Python库在网络爬虫中的应用,涵盖了请求构造、响应处理、POST请求、代理设置、Cookie和Session管理以及SSL证书处理等关键环节,为读者提供了丰富的实践案例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 urllib

1.1 urllib.request 版本常用方法

import urllib.request
url='https://www.baidu.com/'
#headers应对反爬
headers={'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36'}
#获取headers方法:打开浏览器-->右键检查,打开开发者工具-->点击Network-->Headers-->Request Headers-->User-Agent
#1.创建请求对象
seq=urllib.request.Request(url,headers=headers)
#2.获取响应对象
response=urllib.request.urlopen(seq)

1.2 响应对象response的用法

#接上面代码
#3.读取响应对象
result=response.read()#字节类型
#4.对响应对象进行解码
html=result.decode('utf-8')

1.3 urllib.parse.urlencode() /quote()

#模拟百度搜索,爬取搜索网页
#例如:https://www.baidu.com/s?ie=UTF-8&wd=%E6%B5%B7%E8%B4%BC%E7%8E%8B(海贼王)
import urllib.request
import urllib.parse
#1.urlencode(字典)
Name={'wd':input('Enter the name that you wanna search: ')}
name=urllib.parse.urlencode(Name)
url='https://www.baidu.com/s?ie=UTF-8&'+name
#2.quote(字符串)
Name=input('Enter the name that you wanna search: ')
name=urllib.parse.quote(Name)
url='https://www.baidu.com/s?ie=UTF-8&wd='+name
headers={'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36'}
seq=urllib.request.Request(url,headers=headers)
response=urllib.request.urlopen(seq)
html=response.read().decode('utf-8')
#写入文件
with open(f'百度搜索{Name['wd']}','w',encoding='utf-8') as f:
	f.write(html)

2 requests模块

2.1 响应对象response的方法

url='https://www.baidu.com/'
headers={'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36'}
response=requests.get(url,headers=headers)
#返回url
URL=response.url
#返回字节流(二进制)
result=response.content
#返回unicode格式数据(字符串)
result=response.text
#解码方式
#1
response.encoding='utf-8'
result=response.text
#2
response.content.decode('utf-8')

2.2 发送post请求

#有道词典模拟
import requests
import json
url='http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule'
headers={'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36'}
key=input('Enter what you wanna translate: ')
data={'i': key,
'from': 'AUTO',
'to': 'AUTO',
'smartresult': 'dict',
'client': 'fanyideskweb',
'salt': '15912495467345',
'sign': '92fa469e5b0e2d780c2fdeed8bbac95d',
'ts': '1591249546734',
'bv': '52e219b107829df251d81c3ece9b6c69',
'doctype': 'json',
'version': '2.1',
'keyfrom': 'fanyi.web',
'action': 'FY_BY_REALTlME'}
#post请求必须输入data数据(从开发者工具里可以找到)
response=requests.post(url,data=data,headers=headers)
response.encoding='utf-8'
html=response.text
#响应对象解码后的数据是json数据类型需要转换成字典
r_dict=json.loads(html)
#从字典里找到翻译数据
#例如:{'type': 'EN2ZH_CN', 'errorCode': 0, 'elapsedTime': 1, 'translateResult': [[{'src': 'hello', 'tgt': '你好'}]]}
result=r_dict["translateResult"][0][0]['tgt']
print(result)

2.3 requests设置代理

  • 使用requests添加代理只需要在请求方法中(get/post)传递proxies参数就可以了
  • 代理网站
    西刺免费代理IP:http://www.xicidaili.com/
    快代理:http://www.kuaidaili.com/
    代理云:http://www.dailiyun.com/

2.4 cookie

  • cookie :通过在客户端记录的信息确定用户身份
  • HTTP是一种无连接协议,客户端和服务器交互仅仅限于请求/响应过程,结束后断开,下一次请求时,服务器会认为是一个新的客户端,为了维护他们之间的连接, 让服务器知道这是前一个用户发起的请求,必须在一个地方保存客户端信息。

2.5 session

  • session :通过在服务端记录的信息确定用户身份,这里这个session就是一个会话

2.6 处理不信任的SSL证书

#params是插入属性值,verity=False代表网页不被信任,但我们仍然想爬取数据,proxies=proxy是设置代理
response=requests.get(url,params=kw,headers=headers,verity=False,proxies=proxy)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值