2015-09-11 112 views
-1

我想使用Flask在Python中爲網頁抓取工具I wrote創建Web界面。我無法打印結果,所以想到了顯示一個列表。如何在login.html頁面中打印for循環的結果?打印網頁抓取工具輸出

from flask import Flask, render_template, redirect, url_for, request 

from bs4 import BeautifulSoup, SoupStrainer 

import urllib2 

import re 

from flask import jsonify 

app = Flask(__name__) 

@app.route('/login', methods=['GET', 'POST']) 

def login(): 
    url = "example.com" 

    url_list = ["example.com/1", "example.com/2"] 
    found_list = [] 

    if request.method == 'POST': 
     if request.form['inpur_url'] != 'example.com': 
      error = 'Invalid Credentials. Please try again.' 
     else: 
      for line1 in url_list: 
       #print "Crawled" " " + line1 
       try: 
        html_page = urllib2.urlopen(line1) 
        soup = BeautifulSoup(html_page) 
        link = soup.findAll(href=True) 
       except urllib2.HTTPError: 
        pass 
       for link1 in link: 
        url1 = link1.get("href") 
        if url in url1: 
         found_list.append(url) 
       return jsonify(found_list)  

    #return render_template('login.html', error=error) 
    return jsonify(found_list)  

if __name__ == '__main__': 
    app.run(debug=True) 
+0

@jonrsharpe謝謝。仍然與那個奮鬥 –

+0

只需粘貼代碼,全選,然後按Ctrl-K或「{}」按鈕。不要在任何地方反彈。 – jonrsharpe

+0

謝謝。肯定會記住這一點 –

回答

0

我不知道你的整體設計決定,但我敢肯定,在你的功能邏輯實際上並沒有去尋找網頁中的鏈接。這將利用urllib2和BeautifulSoup爲您提供鏈接列表:

if request.method == 'POST': 
    if request.form['inpur_url'] != 'example.com': 
     error = 'Invalid Credentials. Please try again.' 
    else: 
     for url in url_list: 
      try: 
       handle = urllib2.urlopen(url) 
       contents = handle.read() 
       soup = BeautifulSoup(contents) 
       links = soup.find_all("a") 
       for link in links: 
        found_list.append(link.get("href")) 
      except urllib2.HTTPError: 
       pass 
+0

謝謝。我可以在網頁中找到鏈接......但我不知道如何使用燒瓶打印結果。 –

+0

嘗試在燒瓶內使用json模塊: 「from flask import json」 然後「return json.dumps(found_list)」 – georgeofallages