我正在使用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> </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文件的特定标题,然后下载它们,因为我将永远知道他们的名字
感谢您的帮助, 汤姆
答案 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)
这会将所有文件下载到您当前的工作目录,并根据其链接文本命名。