Получение большого количества URL-адресов - PullRequest
0 голосов
/ 30 июня 2010

Редактировать: Просто для пояснения, я использую Python и хотел бы сделать это в Python.

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

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

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

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

П.С .: Я пробовал это:

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: список индексов вне диапазона

Ответы [ 4 ]

1 голос
/ 30 июня 2010

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

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

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

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

или вы можете использовать форматирование строки (используя % и т. Д. В качестве ответа Уэйна).

1 голос
/ 30 июня 2010

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

то есть вы хотите 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

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

Редактировать:

Форматирование строк очень полезно, и вот как вы можете сделать это на своем примере:

# 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

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

Если вы хотите добавить год и парламентизмените строку следующим образом: 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 & language = EN

Это означает, что вы 'Вам нужно будет передать 3 десятичных знака, например, так:

print search_url % (parliment, year, number)

1 голос
/ 30 июня 2010

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

0 голосов
/ 30 июня 2010

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

...