Python mechanize, suivant Lien par url et quel est le paramètre nr?

je suis désolé d'avoir à demander quelque chose comme ça mais la documentation de mécanisation de python semble vraiment faire défaut et je ne peux pas le comprendre.. ils donnent seulement un exemple que je peux trouver de suite un lien:

response1 = br.follow_link(text_regex=r"cheeses*shop", nr=1)

mais je ne veux pas utiliser un regex, je veux juste suivre un lien basé sur son url, comment je ferais ça.. aussi ce qui est "nr" est parfois utilisé pour les liens suivants?

Merci pour l'info

20
demandé sur Rick 2010-08-25 23:43:52

4 réponses

br.follow_link prend un Link objet ou un mot-clé arg (nr=0).

br.links() liste tous les liens.

br.links(url_regex='...') liste tous les liens dont les urls correspondent au regex.

br.links(text_regex='...') liste tous les liens dont le texte correspond au regex.

br.follow_link(nr=num) suit le num E lien sur la page, avec Compter à partir de 0. Il renvoie un objet de réponse (du même genre que br.ouvrir.(..) retourne)

br.find_link(url='...') renvoie l' Link objet dont url égale exactement l'url donnée.

br.find_link,br.links,br.follow_link,br.click_link tous acceptent les mêmes mots-clés. Exécutez help(br.find_link) voir la documentation sur ces mots clés.

Edit: Si vous avez une url cible que vous souhaitez suivre, vous pourriez faire quelque chose comme ceci:

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
répondu unutbu 2010-08-26 12:17:07

j'ai trouvé cette façon de le faire, pour référence pour quiconque ne veut pas utiliser regex:

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()

Ou bien, il va travailler par le texte du lien aussi:

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
répondu Rick 2010-08-25 21:10:27

en regardant le code, je soupçonne que vous voulez

response1 = br.follow_link(link=LinkObjectToFollow)

nr est la même que celle documentée sous l'appel find_link.

EDIT: à mon premier regard rapide, je n'ai pas réalisé que "link" n'était pas un simple lien.

2
répondu jkerian 2010-08-25 19:51:27

nr est utilisé pour où exactement le lien que vous suivez. si le texte ou l'url qui vous a été regex plus d'un. par défaut est 0 donc, si vous utilisez default, vous n'aurez qu'à suivre link first regex . exemple la source :

<a href="link.html>Click this link</a>
<a href="link2.html>Click this link</a>

dans cet exemple, nous devons suivre le texte" cliquez sur ce lien " mais nous choisissons link2.code html pour suivre exactement

br.click_link(text='Click this link', nr=1)

par elle, vous obtiendrez link2.réponse html

2
répondu Yuda Prawira 2010-10-03 12:51:17