You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

2018版Python urllib.request网页爬取脚本运行错误求助

解决urllib.request.urlopen访问网站时的报错问题

嘿,我看你这段网页抓取脚本踩坑了,咱们来一步步搞定它~

先看看你写的代码:

import bs4 as bs
import urllib.request
source = urllib.request.urlopen('https://pythonprogramming.net/parsememcparseface/').read()
soup = bs.BeautifulSoup(source, 'lxml')
print(source)

你遇到的报错大概率是目标网站的基础反爬机制拦截了你的请求——urllib默认发送的请求里没有携带User-Agent(客户端标识)信息,网站会把它识别成非浏览器的爬虫请求,直接拒绝了访问。

解决方案:给请求添加模拟浏览器的请求头

我们只需要构造一个带浏览器标识的请求头,再发送请求就可以绕过这个拦截了,修改后的代码如下:

import bs4 as bs
import urllib.request

# 构造请求头,模拟常见的Chrome浏览器(你也可以换成其他浏览器的标识)
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'}
# 创建带有请求头的Request对象
req = urllib.request.Request('https://pythonprogramming.net/parsememcparseface/', headers=headers)
# 发送请求并获取响应内容
source = urllib.request.urlopen(req).read()
soup = bs.BeautifulSoup(source, 'lxml')

# 用soup的prettify()方法格式化输出HTML,比直接打印原始字节流更易读
print(soup.prettify())

额外小提示:

  • User-Agent可以在浏览器的开发者工具里找到(按F12,在Network标签里随便找一个请求,查看Request Headers里的User-Agent字段),用真实的浏览器标识成功率更高
  • 你原来的print(source)会输出原始的HTML字节流,看起来很乱,用soup.prettify()可以把HTML结构格式化,方便你查看和后续解析

内容的提问来源于stack exchange,提问作者UntouchedDruid4

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 11:07:13