2010-06-30 2 views
0

Редактирование: Просто для пояснения Я использую python и хотел бы сделать это в python.Извлечение большого количества URL-адресов

Я нахожусь в центре сбора данных для исследовательского проекта в нашем университете. В основном мне нужно очистить много информации с веб-сайта, который контролирует Европейский парламент. Вот пример того, как URL одного сайта выглядит следующим образом:

http://www.europarl.europa.eu/sides/getDoc.do?type=REPORT&mode=XML&reference=A7-2010-0190&language=EN

Цифры после ссылки часть адреса ссылается на: A7 = парламент в сессии (предыдущие парламенты A6 и т.д.), 2010 = год, 0190 = номер файла.

Что я хочу сделать, так это создать переменную, которая имеет все URL-адреса для разных парламентов, поэтому я могу перебрать эту переменную и очистить информацию с веб-сайтов.

PS: Я попытался это:

number = range(1,190,1) 

    for i in number: 
     search_url = "http://www.europarl.europa.eu/sides/getDoc.do?type=REPORT&mode=XML&reference=A7-2010-" + str(number[i]) +"&language=EN" 

     results = search_url 
     print results 

, но это дает мне следующую ошибку: Traceback (самый последний вызов последним): Файл "", строка 7, в IndexError: индекс списка из диапазона

ответ

1

Если я правильно понимаю, вы просто хотите, чтобы у вас была возможность перебирать пароли?

i.e. вы хотите A7, A6, A5 ...?

Если это то, что вы хотите, простой цикл может справиться с этим:

for p in xrange(7,0, -1): 
    parliment = "A%d" % p 
    print p 

для других значений подобных петель будут работать точно так же:

for year in xrange(2010, 2000, -1): 
    print year 

for filenum in xrange(100,200): 
    fnum = "%.4d" % filenum 
    print fnum 

Вы могли легко вкладывать свою петлю в правильный порядок для создания комбинации (ей), в которой вы нуждаетесь. НТН!

Edit:

Строка форматирования супер полезно, и вот как вы можете сделать это с помощью, например:

# Just create a string with the format specifier in it: %.4d - a [d]ecimal with a 
# precision/width of 4 - so instead of 3 you'll get 0003 
search_url = "http://www.europarl.europa.eu/sides/getDoc.do?type=REPORT&mode=XML&reference=A7-2010-%.4d&language=EN" 

# This creates a Python generator. They're super powerful and fun to use, 
# and you can iterate over them, just like a collection. 
# 1 is the default step, so no need for it in this case 
for number in xrange(1,190): 
    print search_url % number 

String formatting принимает строку с различными спецификаторов - вы узнаете их, потому что они имеют% в них - за ними следует% и кортеж, содержащий аргументы в строке формата.

Если вы хотите добавить год и Parliment, измените строку следующим образом: search_url = "http://www.europarl.europa.eu/sides/getDoc.do?type=REPORT&mode=XML&reference=A%d-%d-%.4d&language=EN"

где важные изменения здесь: ссылка = A %d - %d - %.4d & язык = EN

Это означает, что вам необходимо пройти 3 знаков после запятой, как так:

print search_url % (parliment, year, number)

+0

добавьте обратный символ '' '' вокруг него, и вы можете написать 'code stuff'. Я отредактирую свой ответ, чтобы ответить на этот конкретный вопрос. –

+0

number = range (1,190,1) для i в цифрах: search_url = "http://www.europarl.europa.eu/sides/getDoc.do? type = REPORT & mode = XML & reference = A7-2010 - "+ number [i] +" & language = EN " results = search_url print results –

+0

Спасибо alot Wayne, я не смог понять часть кода для комментариев, поэтому я добавил его в вопрос. Но я вижу, что вы были быстрее меня :) Это именно то, что я искал! –

1

Можете ли вы использовать python и wget? Прокрутите сеансы, которые существуют, и создайте строку, чтобы дать wget? Или это перебор?

+0

Я использую python (все еще обучение), но я понятия не имею, что такое wget. Предпочтительно, я хотел бы сохранить его как можно проще ... –

0

Использование селена. Поскольку он контролирует использование реального браузера, он может обрабатывать сайты с использованием сложного javascript. Доступны многие языковые привязки, включая python.

+0

Спасибо, но я не имею понятия о селене, и я хотел бы сделать это изнутри Python (поскольку это единственный язык, с которым я знаком). –

+0

Это хорошо документировано, и я использую его изнутри python. –

1

Извините, я не могу представить это как комментарий, но пока у меня недостаточно высокий балл.

Просмотрев код, указанный в комментарии выше, ваша проблема заключается в том, что вы пытаетесь добавить строку и целое число. Хотя некоторые языки будут делать конвертирование на лету (полезно, когда оно работает, но запутывает, когда это не так), вы должны явно преобразовать его с str().

Это должно быть что-то вроде:

"http://firstpartofurl" + str(number[i]) + "restofurl"

или, вы можете использовать строку форматирования (с помощью % и т.д., как ответ Уэйна).

+0

Спасибо Нейлу! После некоторого googling я понял ошибку, я все еще изучаю основы :) –

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