9

これは私がスクレイピングしたいリンクです: http://www.prudential.com.hk/PruServlet?module=fund&purpose=searchHistFund&fundCd=MMFU_U

「英語版」タブは、ウェブページの英語版を表示するために右上隅にあります。

Web ページの資金情報を読むために押さなければならないボタンがあります。そうでない場合、ビューはブロックされ、scrapy シェルを使用すると常に空の [] になります。

<div onclick="AgreeClick()" style="width:200px; padding:8px; border:1px black solid; 
background-color:#cccccc; cursor:pointer;">Confirmed</div>

AgreeClick の機能は次のとおりです。

function AgreeClick() {
var cookieKey = "ListFundShowDisclaimer";
SetCookie(cookieKey, "true", null);
Get("disclaimerDiv").style.display = "none";
Get("blankDiv").style.display = "none";
Get("screenDiv").style.display = "none";
//Get("contentTable").style.display = "block";
ShowDropDown(); 

この onclick="AgreeClick()" 関数を克服して Web ページをスクレイピングするにはどうすればよいですか?

4

2 に答える 2

4

Scrapy内のリンクをクリックすることはできません ( Scrapy でボタンをクリックするを参照)。

まず最初に、必要なデータがすでに html にあるかどうかを確認します (背景にあるため、そこにあります)。

別のオプションはセレンです:

from selenium import webdriver
import time

browser = webdriver.Firefox()
browser.get("http://www.prudential.com.hk/PruServlet?module=fund&purpose=searchHistFund&fundCd=MMFU_U")

elem = browser.find_element_by_xpath('//*[@id="disclaimer"]/div/div')
elem.click()
time.sleep(0.2)

elem = browser.find_element_by_xpath("//*")
print elem.get_attribute("outerHTML")

もう 1 つのオプションは、mechanizeを使用することです。js コードを実行することはできませんが、ソース コードによるとAgreeClick、CookieListFundShowDisclaimerを に設定するだけtrueです。これは出発点です(機能するかどうかはわかりません):

import cookielib
import mechanize

br = mechanize.Browser()

cj = cookielib.CookieJar()
ck = cookielib.Cookie(version=0, name='ListFundShowDisclaimer', value='true', port=None, port_specified=False,
                      domain='www.prudential.com.hk', domain_specified=False, domain_initial_dot=False, path='/',
                      path_specified=True, secure=False, expires=None, discard=True, comment=None, comment_url=None,
                      rest={'HttpOnly': None}, rfc2109=False)
cj.set_cookie(ck)
br.set_cookiejar(cj)

br.open("http://www.prudential.com.hk/PruServlet?module=fund&purpose=searchHistFund&fundCd=MMFU_U")
print br.response().read()

次に、またはお好みのもので結果を解析できBeautifulSoupます。

于 2013-05-07T18:59:38.627 に答える
4

Python のspynnerライブラリを使用して、ブラウザーをエミュレートし、クライアント側の JavaScript を実行します。

import spynner

browser = spynner.Browser()
url = "http://www.prudential.com/path/?args=values"

browser.load(url)

browser.runjs("AgreeClick();")

markup = browser._get_html()

ご覧のとおり、ページのソースで使用可能な任意の Javascript 関数をプログラムで呼び出すことができます。

結果の解析も必要な場合は、BeautifulSoupを強くお勧めします。

于 2013-05-07T14:15:35.890 に答える