Python 剥离beautfulsoup返回的链接
当我使用beautifulsoup时,我从href返回以下代码Python 剥离beautfulsoup返回的链接,python,regex,hyperlink,beautifulsoup,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以便我可以下载该文件
"/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
它们的一致性如何
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']
>>>
一种更具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
如果您使用的是Python3,synatax会略有不同,上面显示的是Python2.7版本。如果您还喜欢其他参数,这非常好,例如:
print sol["ved"]
>> ['0CDkQFjAJ']
在
?q=
和下一个&
之间切换?不需要正则表达式。它们在前面是一致的,但在最后总是有&或%。然而,自然文件名有时有%字符。@JosephLee-我添加了一个regex选项,它也可以工作。如果您可以使用字符串方法来解决它,您将比re
库所需的开销少。无论哪种方式,都应该是可行的。这是一个很好的答案。:)