在网页上查找Python文件下载链接

4

我需要一个正则表达式,它可以返回被双引号包含的特定文本块开始,并以指定文件扩展名(如.txt)结尾的文本内容。我使用urllib2获取页面的html(该html非常简单)。

基本上,如果我有像这样的东西

<tr>
  <td valign="top"><img src="/icons/unknown.gif" alt="[   ]"></td>
  <td><a href="Client-8.txt">new_Client-8.txt</a></td>
  <td align="right">27-Jun-2012 18:02  </td>
</tr>

它应该只是返回给我。
Client-8.txt

返回值包含在双引号内。我知道文件名以“Client-”开头,文件扩展名为“.txt”。

我正在使用r.search(regex, string)进行尝试,其中输入的字符串是页面的HTML。但我对正则表达式不熟悉。

谢谢!


1
是时候再次分享我在 Stack Overflow 上最喜欢的答案了:https://dev59.com/X3I-5IYBdhLWcg3wq6do#1732454 - Fred Larson
好的,这就结束了。现在来点完全不同的东西吧!谢谢! - ZacAttack
2个回答

4
你不应该使用正则表达式来处理这个任务。使用BeautifulSoup编写一个脚本更容易处理HTML并查找你需要的元素。
在你的情况下,你应该搜索所有以 Client- 开头并且以 .txt 结尾的 <a> 元素。这将给你一个文件列表。

我一直避免使用beautifulSoup,因为我只想使用基本的Python包中包含的工具。但由于正则表达式无法胜任任务,我想我不得不硬着头皮去用了。谢谢! - ZacAttack
您也可以使用Python的HTML解析器(http://docs.python.org/library/htmlparser.html)解析HTML。但是,与使用专门用于抓取网页数据的BeautifulSoup相比,代码会更长。 - Simeon Visser
如果你可以使用外部库并且已经了解 CSS 或 jQuery 选择器,那么 PyQuery 是最佳选项。但是对于这个任务,我会仅使用正则表达式。 - gosom

1
soup = BeautifulSoup('<tr><td valign="top"><img src="/icons/unknown.gif" alt="[   ]"></td><td><a href="Client-8.txt">new_Client-8.txt</a></td><td align="right">27-Jun-2012 18:02  </td>')
x=soup.findAll('a')
for i in x:
    if '.txt' in i['href']:
        print(i['href'])

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接