Python mechanize, following link by url and what is the nr parameter?

I'm sorry to have to ask something like this but python's mechanize documentation seems to really be lacking and I can't figure this out.. they only give one example that I can find for following a link:

response1 = br.follow_link(text_regex=r"cheese\s*shop", nr=1)

But I don't want to use a regex, I just want to follow a link based on its url, how would I do this.. also what is "nr" that is used sometimes for following links?

Thanks for any info

20
задан Rick 25 August 2010 в 19:43
поделиться

3 ответа

br.follow_link принимает либо объект Link, либо ключевое слово arg (например, nr=0).

br.links() выводит список всех ссылок.

br.links(url_regex='...') перечисляет все ссылки, URL-адреса которых соответствуют регулярному выражению.

br.links(text_regex='...') перечисляет все ссылки, текст которых соответствует регулярному выражению.

br.follow_link(nr=num) переходит по numой ссылке на странице, начиная отсчет с 0. Он возвращает объект ответа (такой же, как br.open(. ..) возвращает)

br.find_link(url='...') возвращает объект Link, чей url точно совпадает с заданным URL.

br.find_link, br.links, br.follow_link, br.click_link принимают одни и те же ключевые слова. Запустите help(br.find_link), чтобы просмотреть документацию по этим ключевым словам.

Редактировать: Если у вас есть целевой URL-адрес, по которому вы хотите перейти, вы можете сделать что-то вроде этого:

import mechanize
br = mechanize.Browser()
response=br.open("http://www.example.com/")
target_url='http://www.rfc-editor.org/rfc/rfc2606.txt'
for link in br.links():
    print(link)
    # Link(base_url='http://www.example.com/', url='http://www.rfc-editor.org/rfc/rfc2606.txt', text='RFC 2606', tag='a', attrs=[('href', 'http://www.rfc-editor.org/rfc/rfc2606.txt')])
    print(link.url)
    # http://www.rfc-editor.org/rfc/rfc2606.txt
    if link.url == target_url:
        print('match found')
        # match found            
        break

br.follow_link(link)   # link still holds the last value it had in the loop
print(br.geturl())
# http://www.rfc-editor.org/rfc/rfc2606.txt
49
ответ дан 29 November 2019 в 22:42
поделиться

Глядя на код, я подозреваю, что вы хотите, чтобы

response1 = br.follow_link(link=LinkObjectToFollow)

nr был таким же, как указано в вызове find_link.

РЕДАКТИРОВАТЬ: При первом беглом взгляде я не осознавал, что «ссылка» не была простой ссылкой.

2
ответ дан 29 November 2019 в 22:42
поделиться

Я нашел этот способ сделать это, для справки для тех, кто не хочет использовать регулярное выражение:

r = br.open("http://www.somewebsite.com")
br.find_link(url='http://www.somewebsite.com/link1.html')
req = br.click_link(url='http://www.somewebsite.com/link1.html')
br.open(req)
print br.response().read()

Или это будет работать и по тексту ссылки:

r = br.open("http://www.somewebsite.com")
br.find_link(text='Click this link')
req = br.click_link(text='Click this link')
br.open(req)
print br.response().read()
16
ответ дан 29 November 2019 в 22:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: