一、使用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))
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/236548.html