web-dev-qa-db-ja.com

Python機械化、URLによるリンクとnrパラメータとは?

私はこのようなことを尋ねなければならないのは残念ですが、pythonの機械化のドキュメントは本当に不足しているようで、これを理解することができません。

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

しかし、私は正規表現を使いたくありません。URLに基​​づいてリンクをたどるだけです。これを行うにはどうすればよいですか。また、リンクをたどるために時々使用される「nr」とは何ですか。

情報をありがとう

20
Rick

_br.follow_link_は、Linkオブジェクトまたはキーワード引数(_nr=0_など)を取ります。

br.links()はすべてのリンクをリストします。

br.links(url_regex='...')は、URLが正規表現に一致するすべてのリンクをリストします。

br.links(text_regex='...')は、リンクテキストが正規表現に一致するすべてのリンクをリストします。

br.follow_link(nr=num)は、ページのnumthリンクをたどり、カウントは0から始まります。これは、応答オブジェクト(br.open(...)が返すものと同じ種類)を返します

br.find_link(url='...')は、Linkが指定されたURLと完全に等しいurlオブジェクトを返します。

_br.find_link_、_br.links_、_br.follow_link_、_br.click_link_はすべて同じキーワードを受け入れます。 help(br.find_link)を実行して、これらのキーワードに関するドキュメントをご覧ください。

編集:フォローしたいターゲットURLがある場合は、次のようにすることができます。

_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
unutbu

私はそれを行うためにこの方法を見つけました、正規表現を使用したくない人のための参考のために:

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

コードを見ると、私はあなたが欲しいと思う

response1 = br.follow_link(link=LinkObjectToFollow)

nrは、find_link呼び出しで説明されているものと同じです。

編集:私が最初にざっと見たとき、「リンク」が単純なリンクではないことに気付きませんでした。

2
jkerian

nrは、リンクを正確にたどる場所に使用されます。テキストまたはURLが複数の正規表現である場合。デフォルトはなので、デフォルトを使用すると、リンクの最初の正規表現をたどります。たとえば、ソース:

<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応答を取得します

2
Yuda Prawira