Python mechanize,如何通过URL跟随链接,nr参数是什么?

22 投票
4 回答
38491 浏览
提问于 2025-04-16 03:18

抱歉我得问这样的问题,但我发现Python的mechanize文档实在是太简陋了,我搞不明白……我能找到的关于如何跟随链接的例子只有一个:

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

但是我不想用正则表达式,我只是想根据链接的URL来跟随这个链接,我该怎么做呢……还有,有时候提到的“nr”是什么?

谢谢你提供的任何信息

4 个回答

2

从代码来看,我猜你想要的是

response1 = br.follow_link(link=LinkObjectToFollow)

nr和在find_link调用中描述的一样。

编辑:我第一次随便看了一下,没有意识到“link”并不是一个简单的链接。

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

或者,它也可以通过链接的文本来实现:

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

br.follow_link 可以接收一个 Link 对象或者一个关键字参数(比如 nr=0)。

br.links() 会列出所有的链接。

br.links(url_regex='...') 会列出所有网址符合正则表达式的链接。

br.links(text_regex='...') 会列出所有链接文本符合正则表达式的链接。

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

br.find_link(url='...') 会返回一个 Link 对象,它的 url 和给定的 url 完全相同。

br.find_linkbr.linksbr.follow_linkbr.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

撰写回答