0

我正在使用 pythonweb.py框架来构建一个小型 Web 应用程序。

它由一个

  1. Home page以 url 作为输入
  2. 读取anchor textanchor tags从中读取
  3. 将其写入 csv 文件并下载

当我们点击一​​个export the links按钮时,这里的第 2 步和第 3 步发生了,下面是我的代码

代码.py

import web
from web import form
import urlparse
from urlparse import urlparse as ue
import urllib2
from BeautifulSoup import BeautifulSoup
import csv
from cStringIO import StringIO

urls = (
    '/', 'index',
    '/export', 'export',
)

app =  web.application(urls, globals())
render = web.template.render('templates/')

class index:
    def GET(self):
        return render.home()


class export:

    def GET(self):
        i = web.input()
        if i.has_key('url') and i['url'] !='':
            url = i['url'] 
            page = urllib2.urlopen(url)
            html = page.read()
            page.close()


            decoded = ue(url).hostname
            if decoded.startswith('www.'):
                decoded = ".".join(decoded.split('.')[1:])
            file_name = str(decoded.split('.')[0])

            csv_file = StringIO()
            csv_writer = csv.writer(csv_file)
            csv_writer.writerow(['Name', 'Link'])

            soup = BeautifulSoup(html)
            for anchor_tag in soup.findAll('a', href=True):     
                csv_writer.writerow([anchor_tag.text,anchor_tag['href']]) 
            web.header('Content-Type','text/csv')       
            web.header('Content-disposition', 'attachment; filename=%s.csv'%file_name)
            return csv_file.getvalue()

if __name__ == "__main__":
    app.run()

主页.html

$def with()
<html>
 <head>
   <title>Home Page</title>
 </head>
 <body>
     <form method="GET" action='/export'>
        <input type="text" name="url" maxlength="500" />
        <input class="button" type="submit" name="export the links" value="export the links" />
      </form>
 </body>
</html>

上面的 html 代码显示了一个带有文本框的表单,该文本框采用 url ,并具有按钮export the links按钮,downloads/exports带有锚标记的 csv 文件链接和文本。

  1. 例如,当我们提交http://www.google.co.in并单击时export the links,所有锚 url 和锚文本都保存到 csv 文件并成功下载

  2. 但是例如,当我们http://stackoveflow.com立即给出另一个 url 并单击export the links按钮时,csv 文件(使用 url 的域名创建,如上面的代码所示)正在使用标签链接下载,但下载的 csv 文件还包含数据(锚上一个 url 的文本和链接),即http://www.google.co.in.

那就是数据在来自不同 url 的同一个 csv 文件中被覆盖,谁能告诉我上面export class生成 csv 文件的代码()中有什么问题,为什么数据被覆盖而不是创建一个新的 csv 文件动态创建的名称?

最后,我的意图是下载/导出一个新的 csv 文件,其中包含 url 的域名(在我的代码中切片),每次我们提供新的 url .

任何人都可以扩展/对我的上述代码进行必要的更改,以下载个人 url 的个人 csv 文件............

4

0 回答 0