剥离BeautifulSoup返回的链接

oxalkeyp  于 2022-10-22  发布在  Python
关注(0)|答案(2)|浏览(157)

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

sshcrbum1#

一种更具python风格的方法是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会略有不同,上面显示的是Python2.7版本。如果你也喜欢其他参数,这是非常好的,例如:

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

yrdbyhpb2#

他们之间的一致性如何?

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

相关问题