Python Flask 应用程序直接返回与 python 不同的(已爬网)字符串



我在我正在开发的 Flask 应用程序中发现了一件奇怪的事情。Flask API 旨在接收新闻文章 URL,对其进行爬网(使用报纸库(并预测已爬网文本的类别。

但是,当我直接在Python(Spyder(中运行爬虫时,它会像预期的那样返回文章文本。

from newspaper import Article
url='https://www.dev-insider.de/index.cfm?pid=15010&pk=676039'
article = Article(str(url) , browser_user_agent = 'Chrome', http_success_only=False)
article.download()
article.parse()
print(article.text)

这就像一个魅力。如果我现在在 Flask 应用程序中运行相同的代码段,它会生成属于已爬网网址导航的其他字符串:

from flask import Flask
from newspaper import Article
from flask import request
app = Flask(__name__)
app.config['JSON_AS_ASCII'] = False
app.config['MAX_CONTENT_LENGTH'] = 1000000
#url='https://www.dev-insider.de/index.cfm?pid=15010&pk=676039'
@app.route('/test')
def bla():
    url = request.args.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
if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000)

基本上,第一个片段返回完整的文章文本,而 secon 片段返回:

Sie befinden sich hier: DevOps> Configuration-Management Sie sind noch nicht angemeldet Login |注册 |通讯

我希望我把问题说得足够清楚。如果不是这样,请告诉我。

任何想法发生了什么?

如果要将 url 作为查询字符串传递,则需要确保 url 已正确编码并在代码中再次解码。这意味着您将使用以下命令调用应用:

http://localhost/test?=https%3A%2F%2Fwww.dev-insider.de%2Findex.cfm%3Fpid%3D15010%26pk%3D676039

据我所知,Flask 已经为您解码了查询字符串,所以它应该没问题,您无需自己解码。

URL 的

规范描述了应如何设置 URL 的格式。如果您只是粘贴 URL 而不进行编码,它基本上会破坏格式。

RFC-1738 说:

HTTP URL 采用以下格式:

 http://<host>:<port>/<path>?<searchpart>

相关内容

  • 没有找到相关文章

最新更新