为何Python脚本在Windows 10正常运行,Linux下却执行失败?
Linux下Python脚本执行失败的原因分析及解决办法
先帮你拆解下这个脚本在Windows正常运行、Linux却跑崩的几个核心原因,都是跨系统开发容易踩的坑:
1. 依赖库缺失或安装不完整
你脚本里用到了requests、BeautifulSoup和lxml解析器,Windows环境下你可能早就通过pip装好了这些包,但Linux环境下很可能没装,或者lxml的系统依赖没搞定:
lxml不是纯Python库,它依赖Linux系统的底层开发包:Debian/Ubuntu系需要libxml2-dev和libxslt1-dev,RHEL/CentOS系需要libxml2-devel、libxslt-devel。如果直接pip install lxml,大概率会编译失败,导致脚本无法解析HTML。- 解决办法:先装系统依赖,再装Python包。比如Ubuntu下:
sudo apt-get install libxml2-dev libxslt1-dev python3-dev pip install requests beautifulsoup4 lxml
2. URL中的HTML实体编码问题
你脚本里的URL用了&(这是HTML里&的实体编码),Windows下requests可能自动帮你转义成了正常的&,但Linux下的环境或requests版本可能没做这个处理,导致请求的URL是错误的——服务器收到的参数是&而非&,返回的页面根本不是你要的计算结果页,自然找不到target-value类的元素,触发except块的失败提示。
- 解决办法:把所有
&替换成&,修正后的URL示例:urlCalculator = 'https://salecalc.com/ebay?t=1&cp=12&b=&sp=&s=&r=&q=1&ct=45&sc=&mc=&pt=2&g=15&c=11&fi=on&st=0&pl=1&pe=2.9&pf=0.30&m=1&o=0'
3. User-Agent被网站拦截
有些网站会根据请求的User-Agent判断是否为爬虫,Windows下requests的默认User-Agent带有Windows相关标识,网站愿意返回内容;但Linux下requests的默认User-Agent是python-requests/版本号 (Linux),可能被网站拦截,返回403页面或空白页,导致找不到目标元素。
- 解决办法:手动设置User-Agent,模拟浏览器请求:
headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36' } source = requests.get(urlCalculator, headers=headers).text
4. SSL证书验证失败
Linux系统的CA证书库可能没有包含目标网站的证书,或者证书库过时,导致requests请求HTTPS网站时验证证书失败,无法获取页面内容。
- 解决办法:要么更新系统的CA证书(比如Ubuntu下
sudo apt-get install ca-certificates),要么临时关闭证书验证(不推荐,有安全风险):source = requests.get(urlCalculator, verify=False).text
你可以先从URL编码和依赖库这两个最常见的问题排查,大概率能解决~
内容的提问来源于stack exchange,提问作者Sika Newman




