2013-08-29 2 views
2

У меня есть этот код:Как получить прямую ссылку для скачивания внутри страницы?

import urllib 
from bs4 import BeautifulSoup 

f = open('log1.txt', 'w') 

url ='http://www.brothersoft.com/tamil-font-513607.html' 
pageUrl = urllib.urlopen(url) 
soup = BeautifulSoup(pageUrl) 

for a in soup.select("div.class1.coLeft a[href]"): 
    try: 
     suburl = ('http://www.brothersoft.com'+a['href']).encode('utf-8','replace') 
     f.write ('http://www.brothersoft.com'+a['href']+'\n') 
    except: 
     print 'cannot read' 
     f.write('cannot read:'+'http://www.brothersoft.com'+a['href']+'\n') 

     pass 

    content = urllib.urlopen(suburl) 
    soup = BeautifulSoup(content) 
    for a in soup.select("div.Sever1.coLeft a[href]"): 
     try: 
      suburl2 = ('http://www.brothersoft.com'+a['href']).encode('utf-8','replace') 
      f.write ('http://www.brothersoft.com'+a['href']+'\n') 
     except: 
      print 'cannot read' 
      f.write('cannot read:'+'http://www.brothersoft.com'+a['href']+'\n') 

      pass 

     content = urllib.urlopen(suburl2) 
     soup = BeautifulSoup(content) 
     for a in soup.select("span.p a[href]"): 
      try: 
       print (a['href']).encode('utf-8','replace') 
       f.write ('http://www.brothersoft.com'+a['href']+'\n') 
      except: 
       print 'cannot read' 
       f.write('cannot read:'+'http://www.brothersoft.com'+a['href']+'\n') 

       pass 




f.close() 

Когда я запускаю его, я получаю этот результат:

http://www.brothersoft.com/d.php?soft_id=513607&url=http%3A%2F%2Ffiles.brotherso 
ft.com%2Fphotograph_graphics%2Ffont_tools%2Fkeyman.exe&name=Tamil%20Font 
http://ask.brothersoft.com/ask-a-question/?topic=1 
http://ask.brothersoft.com/ 
http://www.brothersoft.com/d.php?soft_id=513607&url=http%3A%2F%2Fusfiles.brother 
soft.com%2Fphotograph_graphics%2Ffont_tools%2Fkeyman.exe&name=Tamil%20Font 
http://ask.brothersoft.com/ask-a-question/?topic=1 
http://ask.brothersoft.com/ 

Но что мне нужно, это только прямые ссылки на скачивание, как это:

http://www.brothersoft.com/d.php?soft_id=513607&url=http%3A%2F%2Ffiles.brothersoft.com%2Fphotograph_graphics%2Ffont_tools%2Fkeyman.exe&name=Tamil%20Font

ответ

3

Вместо последнего блока:

for a in soup.select("span.p a[href]"): 
     try: 
      print (a['href']).encode('utf-8','replace') 
      f.write ('http://www.brothersoft.com'+a['href']+'\n') 
     except: 
      print 'cannot read' 
      f.write('cannot read:'+'http://www.brothersoft.com'+a['href']+'\n') 

      pass 

читать URL из body «ы onload атрибута:

print soup.find('body')['onload'][10:-2] 
+0

Почему я получил две ссылки для скачивания? http://www.brothersoft.com/d.php?soft_id=513607&url=http%3A%2F%2Ffiles.brotherso ft.com% 2Fphotograph_graphics% 2Ffont_tools% 2Fkeyman.exe & name = Tamil% 20Font http: // www .brothersoft.com/d.php? soft_id = 513607 & url = http% 3A% 2F% 2Fusfiles.brother soft.com% 2Fphotograph_graphics% 2Ffont_tools% 2Fkeyman.exe & name = Tamil% 20Font –

+0

@wanmohdpayed, потому что есть два режима загрузки на второй шаг. Вы можете использовать 'soup.find (" div.Sever1.coLeft a [href] ")' вместо цикла. Дайте мне знать, если у вас есть проблемы с этим. Благодарю. – alecxe

+0

я получил эту ошибку: Traceback (самый последний вызов последнего): Файл "C: \ Users \ внутр-chermo \ Desktop \ soup5.py", строка 32, в содержание = urllib.urlopen (suburl2) файл «C: \ Python27 \ lib \ urllib.py», строка 86, в urlopen return opener.open (url) Файл «C: \ Python27 \ lib \ urllib.py», строка 179, открыта fullurl = развернуть (toBytes (fullurl)) Файл «C: \ Python27 \ lib \ urllib.py», строка 1056, в развертке url = url.strip() AttributeError: объект «NoneType» не имеет атрибута «strip» –