from urllib import request, parseimport json# GET 请求url = "https://api.example.com/data"response = request.urlopen(url)data = response.read().decode()print(data)# POST 请求data = parse.urlencode({"name": "张三", "age": 18}).encode()req = request.Request("https://api.example.com/users", data=data, method="POST")response = request.urlopen(req)print(response.read().decode())
aiohttp(异步HTTP)
异步 HTTP 客户端,配合 asyncio 使用。
安装
pip install aiohttp
import aiohttpimport asyncioasync def fetch(url): async with aiohttp.ClientSession() as session: async with session.get(url) as response: return await response.text()async def main(): urls = [ "https://api.example.com/1", "https://api.example.com/2", "https://api.example.com/3" ] tasks = [fetch(url) for url in urls] results = await asyncio.gather(*tasks) for result in results: print(result)asyncio.run(main())
BeautifulSoup(HTML解析)
解析 HTML 页面,用于爬虫。
安装
pip install beautifulsoup4
from bs4 import BeautifulSoupimport requests# 获取页面response = requests.get("https://www.example.com")soup = BeautifulSoup(response.text, "html.parser")# 查找元素title = soup.find("title")print(title.text)# 查找所有链接links = soup.find_all("a")for link in links: print(link.get("href"), link.text)# CSS选择器articles = soup.select(".article-list .article")for article in articles: print(article.h2.text)
26.4 简单爬虫示例
import requestsfrom bs4 import BeautifulSoupimport timedef crawl_quote(): """爬取名言""" url = "https://quotes.toscrape.com/" response = requests.get(url) soup = BeautifulSoup(response.text, "html.parser") quotes = [] for quote in soup.select(".quote"): text = quote.find(class_="text").text author = quote.find(class_="author").text tags = [tag.text for tag in quote.select(".tag")] quotes.append({ "text": text, "author": author, "tags": tags }) return quotesif __name__ == "__main__": quotes = crawl_quote() for i, quote in enumerate(quotes, 1): print(f"{i}. {quote['text']}") print(f" —— {quote['author']}") print()