1

Python mechanize を使用して以下のような画像をクリックするにはどうすればよいですか?

<a href="..."><img name="next" id="next" src="..."></a>

クリックしたい画像の名前とIDを知っています。どういうわけか親リンクを特定してクリックする必要があります。どうやって?

おまけの質問: そのような画像があるかどうかを確認するにはどうすればよいですか?

4

3 に答える 3

5

mechanize を使用するよりも、bs4 (beautifulsoup 4) を使用する方が非常に簡単です。

from bs4 import BeautifulSoup
import urllib2
text = urllib2.urlopen("http://yourwebpage.com/").read()
soup = BeautifulSoup(text)
img = soup.find_all('img',{'id':'next'})
if img:
    a_tag = img[0].parent
    href = a_tag.get('href')
    print href

親タグを取得することは、もちろん関数 .parentでタグを見つけた後に起こるので、bs4 では非常に簡単です。find_allfind_all関数は配列を返すため、将来的にはこれを行うのが最善ですがif img:、これは Web サイトには当てはまらない可能性があるため、安全に行うことができます。下記参照。

編集:「ボーナスの質問」を含めるようにコードを変更しました。これは、上記で代替として説明したものです。

于 2013-01-01T18:41:02.513 に答える
0

まあ、私は Mechanize を使用してそれを行う方法を知りませんが、使用する方法は知っていますlxml:

ウェブページに次のコードがあると仮定しましょう: <a href="page2.html"><img name="bla bla" id="next" src="Cat.jpg"></a>. を使用しlxmlて、次のコードを記述します。

from lxml import html
page = urlllib2.urlopen('http://example.com')
tree = html.fromstring(page.read())
link = tree.xpath('//img[@id="next"]/ancestor::a/attribute::href')

魔法のほとんどは、tree.xpath最初に で探している画像を定義し、次にその直前//img[@id="next"]のタグを探していることを指定し、特に属性を探していることを指定する関数で発生します: 。link 変数には、そのクエリに一致する文字列のリストが含まれるようになりました。この場合は link[0] になります。これを効果的にクリックすることができます。a/ancestor::ahref/attribute::hrefpage2.htmlurlopen()

パーツについては//img[@id="next"]、たとえば this: などの他の属性を使用できます。これ//img[@name="bla bla"]は完全に正常に機能します。この状況にどの属性が適しているかを考える必要があります。

この回答が Mechanize を使用していないことはわかっていますが、参考になることを願っています。幸運を!

于 2013-01-01T16:07:30.287 に答える