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

Posted

技术标签:

【中文标题】Python在网页上查找文件下载链接【英文标题】:Python find file download link on webpage 【发布时间】:2012-07-01 09:35:13 【问题描述】:

我需要一个正则表达式,它将返回包含在双引号之间的文本,该双引号以指定的文本块开头,并以特定的文件扩展名(比如 .txt)结束。我正在使用 urllib2 来获取页面的 html(html 很简单)。

如果我有类似的东西

<tr>
  <td valign="top"><img src="/icons/unknown.gif" ></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。但我讨厌正则表达式。

谢谢!

【问题讨论】:

是时候再次链接我最喜欢的答案了:***.com/a/1732454/10077 好吧,这就结束了。现在来点完全不同的东西!谢谢! 【参考方案1】:

您不应为此任务使用正则表达式。使用BeautifulSoup 编写脚本来处理 HTML 并找到您需要的元素要容易得多。

在您的情况下,您应该搜索其href 属性以Client- 开头并以.txt 结尾的所有&lt;a&gt; 元素。这将为您提供所有文件的列表。

【讨论】:

我一直在避免使用 beautifulSoup,因为我只想使用基本 python 包中包含的工具。但由于正则表达式不能胜任这项任务,我想我将不得不硬着头皮。谢谢! 您还可以使用 Python 的 HTMLParser 解析 HTML:docs.python.org/library/htmlparser.html。但是代码会比使用 BeautifulSoup(专门用于抓取)更长。 如果您可以使用外部库并且已经知道 css 或 jquery 选择器 pyquery 是最好的选择。但是对于这项任务,我只会使用正则表达式【参考方案2】:
soup = BeautifulSoup('<tr><td valign="top"><img src="/icons/unknown.gif" ></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'])

【讨论】:

以上是关于Python在网页上查找文件下载链接的主要内容,如果未能解决你的问题,请参考以下文章

python爬虫 将在线html网页中的图片链接替换成本地链接并将html文件下载到本地

python 怎么网页下载文件.

如何在表格里迅速定位到别的文件,就像网页链接一样。描述的模糊了,请电脑高手指点

使用 javascript 查找下载链接的文件大小

怎样查看浏览历史记录

使用python从网页中提取csv下载链接