Изменение ссылки в python mechanize

Я пытаюсь написать скрипт на Python, который будет генерировать ранг-лист моей партии. Для этого мне просто нужно изменить параметр roll-number ссылки, используя функцию проверки элемента в веб-браузере. Ссылка (относительная) выглядит примерно так:

/academic/utility/AcademicRecord.jsp?loginCode=000&loginnumber=000&loginName=name&Home=ascwebsite

Мне просто нужно изменить loginCode, чтобы получить оценку моих товарищей по партии. Я пытаюсь использовать python для перебора всех номеров рулонов и создания рейтингового списка. Я использовал библиотеку chanize, чтобы открыть сайт с помощью python. Соответствующая часть кода:

br = mechanize.Browser()
br.set_handle_robots(False)
response = br.open('link_to_the_page')

Затем я выполняю необходимую аутентификацию и перехожу на соответствующую страницу, где находится ссылка для просмотра оценок.
Затем я нахожу соответствующую ссылку, например:

for link in br.links(url_regex='/academic/utility/AcademicRecord.jsp?'):

Теперь внутри этого я соответствующим образом меняю URL-адрес и атрибуты ссылки. И затем я открываю ссылку, используя:

response=br.follow_link(link)
print response.read()

Но это не работает. Открывает ту же ссылку, т.е. с начальным номером ролика. На самом деле я попытался изменить URL-адрес ссылки на что-то совершенно другое, например http://www.google.com.

link.url='http://www.google.com'
link.base_url='http://www.google.com'

Он по-прежнему открывает ту же страницу, а не страницу Google. Любая помощь будет высоко ценится.


person nishantsingh    schedule 15.05.2014    source источник


Ответы (1)


Согласно исходному коду, follow_link() и click_link() используют ссылки absolute_url, которое задается во время инициализации ссылки. И вы устанавливаете только свойства url и base_url.

Решением будет изменение absolute_url ссылки в цикле:

BASE_URL = 'link_to_the_page'
for link in br.links(url_regex='/academic/utility/AcademicRecord.jsp?'):
    modified_link = ...
    link.absolute_url = mechanize.urljoin(BASE_URL, modified_link)
    br.follow_link(link)

Надеюсь, это поможет.

person alecxe    schedule 15.05.2014