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