我想知道我需要采用哪种方法使用Python或Flask来执行以下任务:
我的编辑器是崇高的,我在Windows Powershell下运行它
现在我的代码显示了这个:
因此,当您输入搜索时,它会转到新页面并显示结果(例如:ddddd)
但我想检查网址是否有效,如果有效则返回该网页及其子网页上所有链接的列表,如下所示:
对于编程世界中的新手有什么想法吗?(现在不是很新,还有很多需要学习的东西......)
感谢您的帮助。
这里我的代码带来了这个结果(它的工作):
所以一个项目文件夹里面有我的.py设置Flask和一个带.html的模板文件夹。
# -*- coding: utf-8 -*-
from flask import Flask, render_template, request
import re
app = Flask (__name__)
@app.route("/")
def index():
return render_template('index.html')
@app.route('/search', methods=['POST', 'GET'])
def search():
error = True
if request.method == 'POST':
return request.form['urlsearch']
else:
return request.args.get('urlsearch')
if __name__ == "__main__":
app.run()
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html lang="en">
<head>
<title>URL TEST</title>
</head>
<body>
<ul id="navigation">
{% for item in navigation %}
<li><a href="{{ item.href }}">{{ item.caption }}</a></li>
{% endfor %}
</ul>
<h1 style="color:orange;">You can put your URL here :</h1>
{{ a_variable }}
<form method="get" action="/search">
<p>Please Input an URL below : </p>
<input type="text" name="urlsearch" />
<input type="submit" value="Search" />
</form>
</body>
</html>
答案 0 :(得分:5)
您可以使用mechanize:
from mechanize import Browser
br = Browser()
r = br.open("http://www.example.com/")
if r.code == 200:
for link in br.links():
print link
else:
print "Error loading page"
from BeautifulSoup import BeautifulSoup
import urllib2
html_page = urllib2.urlopen("http://www.example.com")
if html_page.getcode() == 200:
soup = BeautifulSoup(html_page)
for link in soup.findAll('a'):
print link.get('href')
else:
print "Error loading page"
之前我没有和Flask合作过多,但试试这个:
据我所知,urlsearch
是您从表单中获取的网址,因此请添加对其的检查
@app.route('/search', methods=['POST', 'GET'])
def search():
error = True
if request.method == 'POST':
return request.form['urlsearch']
else:
br = Browser()
r = br.open(request.args.get('urlsearch'))
if r.code == 200:
return br.links()
else:
return "Error loading page"
答案 1 :(得分:1)
在Flask中,您有app对象上所有网址的地图,您可以像这样访问它:
urlmap = app.url_map.__dict__['_rules_by_endpoint']
因此,如果您想在网页上获取所有网址规则,可以使用app.routes在文件底部添加以下内容:
def getUrls():
urlmap = app.url_map.__dict__['_rules_by_endpoint']
rules = []
for rule in urlmap:
rules.append(str(urlmap[rule]))
result = []
for rule in rules:
result.append(rule.split()[1].replace('\'',''))
return result
现在您只能编辑您的视图文件,即处理'/ search'路径的文件:
if request.method == 'POST':
urls = getUrls()
query = str(request.form['urlsearch'])
if query in urls:
return str(urls)
else:
return "url not in urls"
您还需要编辑当前有错误的html表单,将表单方法指定为get,这需要发布,否则您将永远无法访问处理发布请求的块:
<form method="post" action="/search">
并且你会在页面上找到一个溃疡列表:
['/', '/search', '/static/']