0

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

2 回答 2

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']
于 2013-04-15T20:25:35.310 回答
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']
>>>
于 2013-04-15T19:44:55.003 回答