【问题标题】:Stripping links returned by beautfulsoup剥离 beautifulsoup 返回的链接
【发布时间】:2013-04-08 01:21:35
【问题描述】:

当我使用 beautifulsoup 时,我会从 href 返回以下代码。

"/url?q=http://druid8.sit.aau.dk/acc_papers/kdln4ccpef78ielqg01fuabr81s1.pdf&sa=U&ei=HkNsUauqN_GQiAf5p4CwDg&ved=0CDkQFjAJ&usg=AFQjCNGk0DTzu2K2ieIKS-SXAeS5-VYTgA"

只剪切 http://.... pdf 以便我可以下载文件的最简单方法是什么?

for link in soup.findAll('a'):
    try:
            href = link['href']
            if re.search(re.compile('\.(pdf)'), href):
            print href
    except KeyError:
            pass

【问题讨论】:

  • ?q= 和下一个& 之间切换?不需要正则表达式。

标签: python regex hyperlink beautifulsoup


【解决方案1】:

一个更 Pythonic 的方法是 urlparse 库:

A = "/url?q=http://druid8.sit.aau.dk/acc_papers/kdln4ccpef78ielqg01fuabr81s1.pdf&sa=U&ei=HkNsUauqN_GQiAf5p4CwDg&ved=0CDkQFjAJ&usg=AFQjCNGk0DTzu2K2ieIKS-SXAeS5-VYTgA"

import urlparse
sol = urlparse.parse_qs(A)
print sol["/url?q"][0]

这给出了:

>> http://druid8.sit.aau.dk/acc_papers/kdln4ccpef78ielqg01fuabr81s1.pdf

如果您使用的是 Python 3,则语法略有不同,上面显示的是 Python 2.7 版本。如果您也想要其他参数,这真的很好,例如:

print sol["ved"]
>> ['0CDkQFjAJ']

【讨论】:

  • 这是一个很好的答案。 :)
【解决方案2】:

他们遇到的一致性如何?

href.split('q=')[1].split('&')[0]

没有正则表达式也可以工作。这也可以做到:

href[7:href.index('&')] # may need +1 after .index call

它们似乎都在我的交互式终端中工作:

>>> s = "/url?q=http://druid8.sit.aau.dk/acc_papers/kdln4ccpef78ielqg01fuabr81s1.pdf&sa=U&ei=HkNsUauqN_GQiA f5p4CwDg&ved=0CDkQFjAJ&usg=AFQjCNGk0DTzu2K2ieIKS-SXAeS5-VYTgA"
>>>
>>> s[7:s.index('&')]
'http://druid8.sit.aau.dk/acc_papers/kdln4ccpef78ielqg01fuabr81s1.pdf'
>>>
>>> s.split('q=')[1].split('&')[0]
'http://druid8.sit.aau.dk/acc_papers/kdln4ccpef78ielqg01fuabr81s1.pdf'
>>>

你也可以用这个正则表达式到达那里:

>>> import re
>>>
>>> re.findall('http://.*?\.pdf', s)
['http://druid8.sit.aau.dk/acc_papers/kdln4ccpef78ielqg01fuabr81s1.pdf']
>>>

【讨论】:

  • 它们在前面是一致的,但最后总是有 & 或 %。但是,自然文件名有时会包含 % 字符。
  • @JosephLee - 我添加了一个同样有效的正则表达式选项。如果您可以使用字符串方法解决它,您将产生比re 库所需的更少的开销。无论哪种方式,都应该是可行的。
猜你喜欢
  • 2022-11-19
  • 1970-01-01
  • 2023-01-30
  • 1970-01-01
  • 2015-12-17
  • 2013-09-23
  • 1970-01-01
  • 2018-11-20
  • 1970-01-01
相关资源
最近更新 更多