Python机械化,按url链接,nr参数是什么?

Ric*_*ick 20 python mechanize

我很遗憾不得不问这样的事情,但python的机械化文档似乎真的缺乏,我无法弄明白......他们只举一个例子,我可以找到一个链接:

response1 = br.follow_link(text_regex=r"cheese\s*shop", nr=1)
Run Code Online (Sandbox Code Playgroud)

但是我不想使用正则表达式,我只想跟踪基于其URL的链接,我将如何做到这一点..还有什么是"nr",有时用于以下链接?

谢谢你的任何信息

unu*_*tbu 49

br.follow_link采用Link对象或关键字arg(例如nr=0).

br.links() 列出所有链接.

br.links(url_regex='...') 列出其url与正则表达式匹配的所有链接.

br.links(text_regex='...') 列出链接文本与正则表达式匹配的所有链接.

br.follow_link(nr=num)跟随num页面上的第th个链接,从0开始计数.它返回一个响应对象(br.open(...)返回的相同类型)

br.find_link(url='...')返回与给定url完全相等的Link对象url.

br.find_link,br.links,br.follow_link,br.click_link都接受相同的关键字.运行help(br.find_link)以查看有关这些关键字的文档.

编辑: 如果您有一个您想要关注的目标网址,您可以执行以下操作:

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
Run Code Online (Sandbox Code Playgroud)


Ric*_*ick 16

我找到了这种方法,以供任何不想使用正则表达式的人参考:

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()
Run Code Online (Sandbox Code Playgroud)

或者,它也将通过链接的文本工作:

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()
Run Code Online (Sandbox Code Playgroud)

  • 我喜欢这个解决方案比我建议的更好.(我认为它甚至可以在没有调用`br.find_link`的情况下工作).请接受这个,这样它就会冒泡到顶部. (2认同)