当我使用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
答案 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']
>>>