1

我想知道我需要使用 Python 或 Flask 采用哪种方法来执行以下任务:

  • 检查url是否有效
  • 如果有效,则返回该页面及其子页面上所有链接的列表

我的编辑器非常棒,我在 Windows Powershell 下运行它

现在我的代码显示了这个:

在此处输入图像描述

因此,当您输入搜索时,它会转到新页面并显示结果(例如:ddddd)

在此处输入图像描述

但是我想检查 URL 是否有效,如果有效,则返回该页面及其子页面上所有链接的列表,如下所示:

在此处输入图像描述

对编程世界的新手有什么想法吗?(现在不是很新,还有很多东西要学..)

谢谢您的帮助。

这是我带来这个结果的代码(它的工作):

因此,在我的 .py 中设置了一个项目文件夹,其中包含 Flask 和一个带有 .html 的模板文件夹。


Python 文件

# -*- 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>
4

2 回答 2

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"

或者urllib2BeautifulSoup

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是您从表单中获取的 URL,因此请添加检查

@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"
于 2013-08-09T07:41:02.473 回答
1

在 Flask 中,你有一个 app 对象上所有 url 的映射,你可以像这样访问它:

urlmap = app.url_map.__dict__['_rules_by_endpoint']

因此,如果您想获取页面上的所有 url 规则,您可以使用 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

现在您只能编辑您的视图文件,即处理“/搜索”路线的文件:

    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">

瞧,您将在页面上获得 ulrs 列表:

['/', '/search', '/static/']
于 2013-08-09T08:08:26.703 回答