剥离由beautifulsoup返回的链接

时间:2013-04-15 19:40:13

标签: python regex hyperlink beautifulsoup

当我使用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

2 个答案:

答案 0 :(得分: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,则synatax略有不同,如上所示是Python 2.7版本。如果您还喜欢其他参数,那么真的很好,例如:

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

答案 1 :(得分:0)

他们遇到的情况如何?

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']
>>>