python怎么打开网站
作者:探索 来源:休闲 浏览: 【大 中 小】 发布时间:2026-10-17 06:42:13 评论数:
用Python打开网站,打开最直接的网站方式是调用标准库里的urllib。一行代码就能拿到网页内容:
import urllib.request response = urllib.request.urlopen('https://example.com') html = response.read().decode('utf-8') print(html[:500]) 这段代码做的打开事很朴素——向example.com发一个HTTP GET请求,把服务器返回的网站字节流读出来,再按UTF-8解码成字符串。打开read()拿到的网站是bytes,不decode的打开话打印出来会是一堆\xe4\xbd\xa0这样的东西。我第一次跑这段代码时忘了decode,网站盯着满屏乱码愣了好几秒。打开
不过urllib用起来有点啰嗦。网站加个请求头要构造Request对象,打开处理异常要写try/except,网站遇到重定向还得自己跟。打开实际项目里我基本不用它,网站更顺手的打开是第三方库requests。装一下:pip install requests,然后:
import requests r = requests.get('https://example.com') print(r.status_code) print(r.text[:500]) r.text已经帮你解码好了,r.status_code直接告诉你服务器返回的是200还是404。requests还自动处理了gzip压缩、连接池、会话保持这些琐事。我拿它抓过天气数据、批量下载过图片、调过各种JSON API,几乎没遇到过什么坑。
有时候你需要的不是网页的HTML,而是浏览器里看到的最终画面。比如很多网站的内容是JavaScript动态渲染的,requests拿到的HTML里只有一堆<script>标签,真正的数据还没加载出来。这时候得用selenium或者playwright这类工具,它们会启动一个真实的浏览器内核,等页面加载完再取内容。
from selenium import webdriver driver = webdriver.Chrome() driver.get('https://example.com') print(driver.page_source[:500]) driver.quit() 代价是慢。启动浏览器本身就要一两秒,内存占用也大。如果只是抓静态页面,没必要上selenium。我一般先用requests试一下,发现拿不到想要的数据再换方案。
还有一种情况:你其实不需要网页内容,只是想让Python触发一下某个URL。比如调用一个Webhook,或者提交一个表单。这种场景用requests.post()发个请求就够了,连返回内容都不用看。我有次写自动化脚本,每天定时给一个接口发个信号,三行代码搞定,比打开浏览器手动操作省事得多。
说到打开网站,有个细节容易被忽略:超时。默认情况下requests会一直等服务器响应,如果对方挂了或者网络不通,你的程序就卡在那里。加个timeout=10参数,最多等10秒,超时就抛异常。这个习惯能帮你省掉很多莫名其妙的“程序没反应”问题。
try: r = requests.get('https://example.com', timeout=10) r.raise_for_status() except requests.exceptions.RequestException as e: print(f'出错了: { e}') raise_for_status()会在状态码是4xx或5xx时直接抛异常,不用自己写if r.status_code == 200。这两个小技巧加在一起,代码的健壮性会好很多。
最后提一句编码问题。国内不少网站的HTML用的是GBK或GB2312,requests有时候猜不准编码,r.text出来是乱码。这时候可以手动指定:r.encoding = 'gbk',再读r.text就正常了。判断方法也简单,看r.apparent_encoding或者直接看HTML里<meta charset=>写的是什么。
Python打开网站这件事,核心就是发HTTP请求、拿响应、处理内容。工具选哪个取决于你要做什么——静态页面用requests,动态渲染用selenium,标准库urllib留着应急。没有哪个方案是万能的,多试几次就知道哪个趁手了。
