HTTP请求库的使用

HTTP请求库的使用

urllib库

  1. urllib是URL处理模块,包含几个用于处理URL的模块。
  • urllib.request用来打开和读取URL链接;
  • urllib.error包含了urllib.request抛出的异常;
  • urllib.parse用于解析URL链接;
  • urllib.robotparser用于解析robots.txt文件。
  1. urllib库的使用
# 百度搜索ip
import urllib.request

url = 'http://www.baidu.com/s?wd=ip'
# header指定客户端和cookie
headers = { 
    'user-agent': 'xxx',
    'cookie': 'xxx'
}

# 请求对象定制
req = urllib.request.Request(url=url, headers=headers)
# 可以选择花生代理、快代理等网站的代理
# proxies = {
#     'http': '58.220.95.32:10174'
# }
# handler = urllib.request.ProxyHandler(proxies=proxies)
# 代理池:包含一堆高密的代理IP,使用random.choice随机选取IP
# handler build_opener open
handler = urllib.requst.HTTPHandler()
opener = urllib.requst.build_opener(handler)
resp = opener.open(req)
content = resp.read().decode('utf-8')
print(content)
  1. 获取豆瓣热门电影封面
import urllib.request
import json 
import csv

url = 'https://movie.douban.com/j/search_subjects?type=movie&tag=%E7%83%AD%E9%97%A8&page_limit=50&page_start=0'
headers = {'User-agent': 'xxx'}
req = urllib.request.Request(url=url, headers=headers)
resp = urllib.request.urlopen(req)
content = resp.read().decode('utf-8')
jsonObj = json.loads(content)
movices = jsonObj.get("subjects")
csv_items = []
items = []
for movie in movies:
    items.append(movie.get("title"))
    cover = movie.get("cover")
    items.append(cover)
    # 下载封面
    urllib.request.urlretrieve(cover, cover.split("/")[-1])
    csv_items.append(items)
    items = []
    
with open('豆瓣热门电影.csv', 'a', newline='', encoding='utf-8') as f:
    writer = csv.writer(f)
    writer.writerows(csv_items)
    
# 保存数据,open方法默认使用gbk编码,需要保存汉字,指定编码格式为utf-8
# with open('douban.json', 'w', encoding='utf-8') as f:
#     f.write(content)    
  1. 使用百度翻译单词
import urllib.request
import urllib.parse 
import json

url = 'https://fanyi.baidu.com/sug'
headers = {'User-agent': 'xxx'}
# 搜索参数, post请求的参数必须进行url编码,还需要进行字符集编码
data = {'kw': 'apple'}
data = urllib.parse.urlencode(data).encode('utf-8')
req = urllib.request.Request(url=url, data=data, headers=headers)
# 模拟浏览器向服务器发送请求
resp = urllib.request.urlopen(req)
# 获取响应数据
content = resp.read().decode('utf-8')
# 把字符串类型转换成json对象
obj = json.loads(content)
print(obj)
# 详细翻译,有反爬虫机制,可以传递请求头
url = 'https://fanyi.baidu.com/v2transapi?from=en&to=zh'
# notepad++ 查找替换使用正则,(.*): (.*)替换为'\1': '\2',
headers = {
    'Cookie': 'xxx'
}

data = {
    'from': 'en',
    'to': 'zh',
    'query': 'spider',
    'transtype': 'realtime',
    'simple_means_flag': '3',
    'sign': '63766.268839',
    'token': 'xxx',
    'domain': 'common'
}

data = urllib.parse.urlencode(data).encode('utf-8')
# 请求对象的定制
req = urllib.request.Request(url=url, data=data, headers=headers)
resp = urllib.request.urlopen(req)
content = resp.read().decode('utf-8')
obj = json.loads(content)
print(obj)

requests库

  1. requests是使用python实现的http库。
  2. requests库的使用
import requests

url = 'http://www.baidu.com'
resp = requests.get(url)
print(type(resp)) # Response响应类型
resp.encoding = 'utf-8' # 设置响应的编码格式
print(resp.text) # 以字符串形式返回网页的源码
print(resp.url) # 返回URL地址
print(resp.content) # 返回二进制数据
print(resp.status_code) # 返回响应状态码
print(resp.headers) # 返回响应头
# 参数使用params传递,参数不需要urlencode编码,不需要请求对象的定制,请求资源路径中的问号可以不加
requests.get(url=url, params=data, headers=headers)
  1. 使用百度翻译单词
import requests
import json

url = 'https://fanyi.baidu.com/sug'
headers = {'User-agent': 'xxx'}
data = {'kw': 'apple'}
# post请求不需要编解码,不需要请求对象的定制,请求参数名是data
resp = requests.post(url, data, headers)
content = resp.text
obj = json.loads(content)
print(obj)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

快乐江小鱼

知识创造财富,余额还是小数

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值