一、使用requests库进行网络请求
在Python中进行网络请求,最常用的库便是requests。requests是一个简洁且易于使用的HTTP库,我们可以用它来发送HTTP请求,获取响应,以及进行其他HTTP相关的操作。
请求头是发送请求时附加到HTTP请求中的一些额外信息,最常见的请求头字段是User-Agent和Cookie。如果不设置请求头,有些网站将会拒绝你的请求。
import requests
# 设置请求头
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3',
'Cookie': 'your cookie'
}
# 发送get请求,获取响应
response = requests.get(url, headers=headers)
# 获取响应状态码
print(response.status_code)
# 获取响应内容
print(response.content.decode('utf-8'))
二、使用多线程进行异步请求
在处理大量网络请求时,使用多线程可以大大提高程序的执行效率。线程是一种轻量级的执行单位,多个线程可以并发执行,从而在CPU资源上实现了利用效率的提升。
使用Python的concurrent.futures库可以轻松地实现多线程异步请求。下面的代码演示了如何使用ThreadPoolExecutor进行多线程处理:
import requests
from concurrent.futures import ThreadPoolExecutor
# 设置请求头
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3',
'Cookie': 'your cookie'
}
# 定义请求函数
def request(url):
response = requests.get(url, headers=headers)
print(response.status_code)
# 构建线程池
pool = ThreadPoolExecutor(max_workers=10)
# 将请求函数逐个添加到线程池中
for url in urls:
pool.submit(request, url)
三、使用协程进行异步请求
协程是一种轻量级的线程,可以理解成一种特殊的函数,它在执行过程中可以暂停,以便进行其他任务的处理。Python的asyncio库提供了协程的支持,可以方便地进行异步请求。
下面的代码演示了如何使用asyncio库进行协程异步请求。
import asyncio
import aiohttp
# 设置请求头
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3',
'Cookie': 'your cookie'
}
# 定义异步请求函数
async def request(url):
async with aiohttp.ClientSession(headers=headers) as session:
async with session.get(url) as response:
print(response.status)
print(await response.text())
# 构建事件循环
loop = asyncio.get_event_loop()
# 将异步请求函数逐个添加到任务中
tasks = []
for url in urls:
tasks.append(asyncio.ensure_future(request(url)))
# 执行任务
loop.run_until_complete(asyncio.wait(tasks))