用python mechanize下载zip文件

时间:2013-07-15 20:28:56

标签: python file download zip mechanize

我正在使用Python 2.7,机械化和beautifulsoup,如果有帮助我可以使用urllib

好吧,我正在尝试下载不同的html表中的几个不同的zip文件。我知道特定文件所在的表格(我知道它们是在第一,第二,第三......表格中) 这是网页中html格式的第二个表:

<table class="fe-form" cellpadding="0" cellspacing="0" border="0" width="50%">
            <tr>
                <td colspan="2"><h2>Eligibility List</h2></td>
            </tr>


            <tr>
                <td><b>Eligibility File for Met-Ed</b> - 
                <a href="/content/fecorp/supplierservices/eligibility_list.suppliereligibility.html?id=ME&ftype=1&fname=cmb_me_elig_lst_06_2013.zip">cmb_me_elig_lst_06_2013.zip</td>
            </tr>



            <tr>
                <td><b>Eligibility File for Penelec</b> - 
                <a href="/content/fecorp/supplierservices/eligibility_list.suppliereligibility.html?id=PN&ftype=1&fname=cmb_pn_elig_lst_06_2013.zip">cmb_pn_elig_lst_06_2013.zip</td>
            </tr>



            <tr>
                <td><b>Eligibility File for Penn Power</b> - 
                <a href="/content/fecorp/supplierservices/eligibility_list.suppliereligibility.html?id=PP&ftype=1&fname=cmb_pennelig_06_2013.zip">cmb_pennelig_06_2013.zip</td>
            </tr>



            <tr>
                <td><b>Eligibility File for West Penn Power</b> - 
                <a href="/content/fecorp/supplierservices/eligibility_list.suppliereligibility.html?id=WP&ftype=1&fname=cmb_wp_elig_lst_06_2013.zip">cmb_wp_elig_lst_06_2013.zip</td>
            </tr>


            <tr>
                <td>&nbsp;</td>
            </tr>
        </table>

我打算使用以下代码进入第二个表:

from bs4 import BeautifulSoup
html= br.response().read()
soup = BeautifulSoup(html)
table = soup.find("table", class=fe-form)

我猜那个班级=&#34; fe-form&#34;是错误的,因为它不起作用,但表中没有其他属性可以区别于其他表。所有表都有cellpadding =&#34; 0&#34; CELLSPACING =&#34; 0&#34;边界=&#34; 0&#34;宽度=&#34; 50%&#34 ;.我想我不能使用find()函数。

所以我想到第二个表然后下载这个页面上的文件。有人可以给我一些信息,让我朝着正确的方向前进。我之前使用的是表格,但不是表格。我希望有一些方法可以找到我正在寻找的zip文件的特定标题,然后下载它们,因为我将永远知道他们的名字

感谢您的帮助, 汤姆

1 个答案:

答案 0 :(得分:0)

要选择所需的表格,只需执行

即可
table = soup.find('table', attrs={'class' : 'fe-form', 'cellpadding' : '0' })

这假设您的文档中只有一个table = fe-form和cellpadding = 0的表。如果还有更多,此代码将仅选择第一个表。为了确保你没有忽略页面上的任何内容,你可以做到

tables = soup.findAll('table', attrs={'class' : 'fe-form', 'cellpadding' : '0' })
table = tables[0]

并且可能断言len(tables)== 1以确保只有一个表。

现在,要下载文件,您可以做很多事情。假设您的代码已加载mechanize,您可以使用

a_tags = table.findAll('a')

for a in a_tags:
  if '.zip' in a.get('href'):
    br.retrieve(a.get('href'), a.text)

这会将所有文件下载到您当前的工作目录,并根据其链接文本命名。