私は、数多くの異なるウェブサイトから価格を掻き集める必要があるスクレーパーを構築しています。PhantomJSを使用してこのxpathが機能しないのはなぜですか?
すべてのウェブサイトでJSを使用して価格を表示するので、必要なデータをスクレイプするためにセレンを使用しました。
スクレイパーの構築を開始する前に、私は外部ファイルでスクラップしていたURLごとにprice要素を取得するために必要なxpathのリストを作成しました。
私は、私がerrrorを取得し、FirefoxとFirebugは、Hoàweverを使用して、私はセレン(PhantomJSドライバ)でこれらの要素を取得しようとするたびに、これらのXPathを得た:
selenium.common.exceptions.NoSuchElementException: Message: {"errorMessage":"Una
ble to find element with xpath './div'","request":{"headers":{"Accept":"applicat
ion/json","Accept-Encoding":"identity","Connection":"close","Content-Length":"89
","Content-Type":"application/json;charset=UTF-8","Host":"127.0.0.1:51048","User
-Agent":"Python-urllib/2.7"},"httpVersion":"1.1","method":"POST","post":"{\"usin
g\": \"xpath\", \"sessionId\": \"27f41b80-cf63-11e6-bbcc-13b1a315759a\", \"value
\": \"./div\"}","url":"/element","urlParsed":{"anchor":"","query":"","file":"ele
ment","directory":"/","path":"/element","relative":"/element","port":"","host":"
","password":"","user":"","userInfo":"","authority":"","protocol":"","source":"/
element","queryKey":{},"chunks":["element"]},"urlOriginal":"/session/27f41b80-cf
63-11e6-bbcc-13b1a315759a/element"}}
私のxpathが間違っているようだ、しかし、I他のプラグインを使用してそれをダブルチェックし、Firefox上でそのxpathをテストするたびに正しいです。
ここは両方が動作するはず二つの異なるのXPath、(彼らはFirfoxを使用していたが、セレンとしませんでした)です:
"id('regular-hero')/div[3]/div[1]/div[2]/div/div[1]/div/div/span"
"/html/body/div[2]/div[3]/div[1]/div[2]/div/div[2]/div/div/span/text()[1]"
そしてここでは、ターゲットページのhtmlコードはHere
だとここですすべてのループはXPathのリストを保持するJSON外部ファイルをトラバースするために使用されている
self.browser = wd.PhantomJS()
for n in xrange(len(self.url_list)):
url = self.url_list[n]
provider = self.provider_list[n]
self.browser.get(url)
for plan in provider:
for hosting_plan in provider[plan]:
xpath = hosting_plan.values()[0] # Get the xpath of a plan
price_elem = self.browser.find_element_by_xpath("//*")
print price_elem
self.browser.close()
:セレンを使用してelemntsを取得するためのコード。
どうしたのですか?私は何を試すべきですか? lxmlは私を助けますか(HTMLコードが時折壊れていることを考えれば)?
ショー 'HTML'ターゲット要素のコード – Andersson
@AnderssonターゲットページのHTMLコードへのリンクを追加しました。 –
問題のあるオブジェクトに対してインタラクティブなセレニウムスクラップを行い、コードをPythonに書き出すことができます。あなたが間違っていることを指摘する必要があります。 – boardrider