2013-08-21 2 views
0

Я хочу получить ссылку для скачивания. Например, в http://www.brothersoft.com/windows/top-downloads/Как получить ссылку для загрузки в python с помощью beautifulsoup?

поэтому ожидаемый результат должен быть:

List of url: 
1. http://www.brothersoft.com/photoscape-64604.html 
2. http://www.brothersoft.com/orbit-downloader-54366.html 
3. .... 
4. ... 
till 100. 

Я попробовал этот код:

import urllib 
from bs4 import BeautifulSoup 

pageFile = urllib.urlopen("http://www.brothersoft.com/windows/top-downloads/") 

pageHtml = pageFile.read() 

pageFile.close() 

soup = BeautifulSoup("".join(pageHtml)) 

sAll = soup.findAll("a") 

for i in range (0,100) 
    for link in sAll: 
     print i,link 

Но дать неправильный вывод. Спасибо

ответ

1

Прежде всего, BeautifulSoup("".join(pageHtml)) не требуется, так как pageHtml уже является строкой, поэтому вы можете просто использовать это прямо как BeautifulSoup(pageHtml).

for i in range (0,100)

Если вы используете Python 2 (который я думаю, что вы делаете, так как Python 3 в URLLIB не имеет urlopen), вы должны использовать xrange (100) вместо этого, это немного быстрее, и он не нужен чтобы включить первый ноль, если вы рассчитываете с нуля, поэтому xrange (100) будет делать все отлично.

Кроме того, у вас есть синтаксическая ошибка, нет пробелов между range и (0,100) и добавьте : непосредственно после нее.

Наконец, ваш код будет просто распечатывать все ссылки 100 раз, что вам не нужно; если вам нужно только первые 100 ссылок вы должны использовать что-то вроде этого:

for i in xrange(100): print sAll[i]["href"]

В основном это делает список от 0 до 100, и перебирает его, текущее значение в i, то он использует это i как индекс для извлечения данных из массива sAll (очевидно, это вызовет исключение KeyError, если список sAll меньше 100), и, наконец, он печатает атрибут «href» этого элемента, который является целью ссылки.

Если вы хотите напечатать номер, вместо этого вы можете использовать print i, sAll[i]["href"].

+0

я получил эту ошибку: Файл "C: \ Documents и Settings \ Fairuz \ Desktop \ soup.py", строка 13, в печати я, Салль [я] [ "HREF"] Файл «C: \ Python27 \ lib \ encodings \ cp437.py ", строка 12, в коде return codecs.charmap_encode (вход, ошибки, encoding_map) UnicodeEncodeError: кодек 'charmap' не может кодировать символ u '\ u2013' в позиции 115: символьные карты на

+0

Как насчет 'print i, sAll [i] [" href "]. encode ('utf-8')'? –

+0

Файл «C: \ Documents and Settings \ Fairuz \ Desktop \ soup.py», строка 13, в печать i, sAll [i] ["href"] Файл "C: \ Python27 \ lib \ encodings \ cp437 .py», строка 12, в кодирования возврата codecs.charmap_encode (вход, ошибки, encoding_map) UnicodeEncodeError: 'CharMap' кодек не может кодировать символ и '\ u2013' в позиции 115: символ сопоставляется

Смежные вопросы