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

Flask应用中newspaper爬取结果与直接运行Python不一致求助

问题分析与解决方案

这是个典型的URL参数传递时的编码问题,我来帮你拆解原因和解决办法:

核心原因

你本地测试用的URL是转义后的格式:https://www.dev-insider.de/index.cfm?pid=15010&pk=676039(这里&是HTML转义后的&),但当你在浏览器或其他客户端请求Flask接口时,如果直接传递原始URL:

http://localhost:5000/test?url=https://www.dev-insider.de/index.cfm?pid=15010&pk=676039

浏览器会把第二个&当成Flask接口的参数分隔符,导致request.args.get('url')只能拿到https://www.dev-insider.de/index.cfm?pid=15010,丢失了后面的pk=676039参数。爬取这个不完整的URL时,目标网站会返回默认的导航页内容,也就是你看到的那段文字。

解决方法

方法1:请求时对URL进行编码

在传递url参数前,把URL中的&替换成URL编码后的%26,比如请求地址改成:

http://localhost:5000/test?url=https://www.dev-insider.de/index.cfm?pid=15010%26pk=676039

这样Flask就能拿到完整的URL了。

方法2:在Flask中手动拼接完整参数

如果无法控制请求端的编码行为,可以在Flask里手动拼接所有后续参数:

@app.route('/test')
def bla():
    # 获取基础url部分
    base_url = request.args.get('url')
    # 获取剩余的所有参数
    remaining_params = request.args.to_dict()
    del remaining_params['url']
    # 拼接完整URL
    if remaining_params:
        params_str = '&'.join([f"{k}={v}" for k, v in remaining_params.items()])
        full_url = f"{base_url}&{params_str}"
    else:
        full_url = base_url
    
    article = Article(str(full_url), browser_user_agent='Chrome', http_success_only=False)
    article.download()
    article.parse()
    text_raw = article.text
    return text_raw

这样即使请求时的&被拆分,也能把参数重新拼回去。

方法3:使用POST请求传递URL

如果是前端调用,改用POST请求,把URL放在请求体里(比如JSON格式),这样就不会有URL参数拆分的问题:

@app.route('/test', methods=['POST'])
def bla():
    data = request.get_json()
    url = data.get('url')
    article = Article(str(url), browser_user_agent='Chrome', http_success_only=False)
    article.download()
    article.parse()
    text_raw = article.text
    return text_raw

请求时用POST发送JSON:

{"url": "https://www.dev-insider.de/index.cfm?pid=15010&pk=676039"}

验证建议

你可以先在Flask的bla函数里加一行打印,看看实际拿到的url是什么:

print("Received URL:", url)

这样就能快速确认是不是URL被截断了。

内容的提问来源于stack exchange,提问作者hag o hi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:40:30