Python Flask 应用 returns 与 python 直接不同的(抓取的)字符串
Python Flask app returns different (crawled) string than python directly
我在我正在开发的 Flask 应用程序中发现了一个奇怪的东西。
Flask API 用于接收新闻文章 url,抓取它(使用报纸库)并预测抓取文本的类别。
但是,我 运行 爬虫直接在 Python (Spyder) 它 returns 文章文本中,正如预期的那样。
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 应用程序中的同一段代码,它会产生一些其他字符串,这些字符串属于爬网导航 url:
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)
基本上第一个片段 returns 是完整的文章文本,而第二个片段 returns:
Sie befinden sich hier: DevOps > Configuration-Management Sie sind noch nicht angemeldet Login | Registrierung | Newsletter
希望我把问题讲得够清楚了。如果没有,请告诉我。
有什么想法吗?
如果您将 url 作为查询字符串传递,您需要确保 url 已正确编码并在您的代码中再次解码。这意味着您将调用该应用程序:
http://localhost/test?=https%3A%2F%2Fwww.dev-insider.de%2Findex.cfm%3Fpid%3D15010%26pk%3D676039
据我所知,flask 已经为你解码了查询字符串,所以它应该没问题,你不需要自己解码。
URL 的规范描述了 URL 的格式。如果你只是粘贴 URL 而没有编码,它基本上会破坏格式。
RFC-1738 说:
An HTTP URL takes the form:
http://<host>:<port>/<path>?<searchpart>
我在我正在开发的 Flask 应用程序中发现了一个奇怪的东西。 Flask API 用于接收新闻文章 url,抓取它(使用报纸库)并预测抓取文本的类别。
但是,我 运行 爬虫直接在 Python (Spyder) 它 returns 文章文本中,正如预期的那样。
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 应用程序中的同一段代码,它会产生一些其他字符串,这些字符串属于爬网导航 url:
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)
基本上第一个片段 returns 是完整的文章文本,而第二个片段 returns:
Sie befinden sich hier: DevOps > Configuration-Management Sie sind noch nicht angemeldet Login | Registrierung | Newsletter
希望我把问题讲得够清楚了。如果没有,请告诉我。
有什么想法吗?
如果您将 url 作为查询字符串传递,您需要确保 url 已正确编码并在您的代码中再次解码。这意味着您将调用该应用程序:
http://localhost/test?=https%3A%2F%2Fwww.dev-insider.de%2Findex.cfm%3Fpid%3D15010%26pk%3D676039
据我所知,flask 已经为你解码了查询字符串,所以它应该没问题,你不需要自己解码。
URL 的规范描述了 URL 的格式。如果你只是粘贴 URL 而没有编码,它基本上会破坏格式。
RFC-1738 说:
An HTTP URL takes the form:
http://<host>:<port>/<path>?<searchpart>