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

时间:2010-08-25 19:43:52

标签: python mechanize

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

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

但是我不想使用正则表达式,我只想根据其网址关注链接,我该怎么做呢...还有什么是“nr”,有时用于以下链接?

感谢您提供任何信息

4 个答案:

答案 0 :(得分:49)

br.follow_link采用Link对象或关键字arg(例如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='...')返回Linkurl完全等于给定网址的对象。

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

答案 1 :(得分: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()

答案 2 :(得分:2)

从查看代码,我怀疑你想要

response1 = br.follow_link(link=LinkObjectToFollow)

nr与find_link调用中记录的相同。

编辑:在我的第一次粗略看一眼,我没有意识到“链接”不是一个简单的链接。

答案 3 :(得分:2)

nr用于您关注的确切链接。 如果您的文本或网址是多个正则表达式。 默认为 0 ,因此如果您使用默认值,您将完全按照链接第一个正则表达式。 例如 来源:

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

在此示例中,我们需要关注“点击此链接”文字,但我们选择link2.html完全按照

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

通过它你会得到link2.html回复