7

モジュール'mechanize'を使用してPythonでスクリーンスクレイパースクリプトを作成しています。hrefにjavascript:__ doPostBackがあるリンクでmechanize.click_link()メソッドを使用したいと思います。解析しようとしているページはAJAXを使用していると思います。

注:mechはmechanize.Browser()です

>>> next_link.__class__.__name__
'Link'
>>> next_link
Link(base_url='http://www.citius.mj.pt/Portal/consultas/ConsultasDistribuicao.aspx', url="javascript:__doPostBack('ctl00$ContentPlaceHolder1$Pager1$lnkNext','')", text='2', tag='a', attrs=[('id', 'ctl00_ContentPlaceHolder1_Pager1_lnkNext'), ('title', 'P\xc3\xa1gina seguinte: 2'), ('href', "javascript:__doPostBack('ctl00$ContentPlaceHolder1$Pager1$lnkNext','')")])
>>> req = mech.click_link(next_link)
>>> req
<urllib2.Request instance at 0x025BEE40>
>>> req.has_data()
False

リンクをクリックしてからページソースを取得したいのですが。

4

3 に答える 3

10

私はmechanizeを使用していませんが、Pythonを使用してWebスクレイピングを頻繁に行っています。

__doPostBackのようなjavascript関数に遭遇すると、次のようになります。Firefoxで
Webサイトにアクセスし、HttpFox拡張機能を使用して、関連するリンクをクリックしたときにブラウザーがWebサーバーに送信するPOST要求のパラメーターを確認します。
次に、urllib.parse.urlencodeを使用してPythonで同じリクエストを作成し、必要なクエリ文字列とPOSTデータを作成します。
ウェブサイトでもCookieを使用することがあるので、Pythonのhttp.cookiejarを使用します。

私はこのテクニックを何度かうまく使ってきました。

于 2011-03-01T17:00:16.743 に答える
1

mechanizeJavascript はサポートしていないと思います。本質的に Javascript の実行に機能を依存しているページをスクレイピングするには、Selenium RCなどの別のツールを使用する必要がある場合があります。

于 2009-09-13T17:56:07.707 に答える
0
>>> next_link.__class__.__name__
'Link'
>>> next_link
Link(base_url='http://www.citius.mj.pt/Portal/consultas/ConsultasDistribuicao.aspx', url="javascript:__doPostBack('ctl00$ContentPlaceHolder1$Pager1$lnkNext','')", text='2', tag='a', attrs=[('id', 'ctl00_ContentPlaceHolder1_Pager1_lnkNext'), ('title', 'P\xc3\xa1gina seguinte: 2'), ('href', "javascript:__doPostBack('ctl00$ContentPlaceHolder1$Pager1$lnkNext','')")])
>>> req = mech.click_link(next_link)
>>> req
<urllib2.Request instance at 0x025BEE40>
>>> req.has_data()
False
于 2009-10-12T09:51:26.703 に答える