php-Pythonで、動的にロードされたWebサイトから特定のデータを要求するにはどうすればよいですか?
PeoplePerHour.com からPythonにページを読み込んでデータ分析を実行したいのですが、要求していないページからデータを取得し続けます。メインに移動する必要があると思います。ページを表示してから、要求したページに何とか更新します。
例: http://www.peopleperhour.com/freelance/data+analyst ですべてのユーザーから価格を取得したいのですが、データは複数のページにまたがっています。
2ページ目をリクエストしたいとします。http://www.peopleperhour.com/freelance/data+analyst#page=2。ここにブラウザでアクセスすると、正常に動作して2ページ目が表示されますが、最初に1ページ目が表示されてから、2ページ目に「更新」されると思います(私は思います)。 Pythonでこれにアクセスすると、最初のページからHTMLが読み込まれ、2ページ目は表示されません。
これが私のコードです:
import requests
from pattern import web
import re
import pandas as pd
def list_of_prices(url):
html = requests.get(url).text
dom = web.DOM(html)
list = []
for person in dom('.freelancer-list-item .medium.price-tag'):
currency = person('sup')
amount = person('span')
list.append([currency[0].content if currency else 'na', amount[0].content if amount else 'na'])
return list
list_of_prices('http://www.peopleperhour.com/freelance/data+analyst#page=2')
何があっても、これは1ページからの価格を返します。
私が見ていなかったのは何が起こっているのですか?
答え :
解決策:
私が正しく理解している場合は、ページを繰り返し処理する必要があります。その場合、問題はURLにあると思います。
指定したURLは次のとおりです。 http://www.peopleperhour.com/freelance/data+analyst#page=2
問題は、「ページ」がそのページのブックマークではないことです。 #page = 2を使用すると、「page=2」というブックマークの同じページに移動するようにブラウザに指示されます。
そのサイトの[次へ]ボタンのURLは次のとおりです。 http://www.peopleperhour.com/freelance/data+analyst?sort=most-relevant&page=2
「&page = 2」と表示されているのがわかりますが、これは別の意味です。彼らのコードでは、「ページ」はURLを介して渡される変数であり、値は2です。これらの変数が複数ある場合は「&」を使用します。また、「?」がありません。シンボル。 URLを介して変数を渡す場合は、?を入力する必要があります。その後に、変数のname=valueペアが続きます。
簡単に修正できます。URLを次のように変更してください:
http://www.peopleperhour.com/freelance/data+analyst?page=2
これは古いURLとの比較です:
http://www.peopleperhour.com/freelance/data+analyst#page=2
簡単なテストとして、修正したURLをコピーしてWebブラウザに貼り付けます。 2ページ目に表示されます。
答え :
解決策:
動的コンテンツ(クライアント側のコードによって生成されたもの)を取得することは、常に非常に注意が必要です。これに対する簡単な解決策はありませんが、本当に掘り下げたい場合は、 PyV8
、{-code-2をお勧めします。
エンジン。 Python
の}
答え :
解決策:
Python3.6でpattern3を使用するとパターンにエラーが発生します
上記のハイパーリンクをクリックして画像を開いてください python3.6環境で同じコードを実行する代わりに、pattern3をインストールする必要があるため、パターンはpython3.6でサポートされていません。 ありがとう!
同様の質問
私たちのウェブサイトで同様の質問で答えを見つけてください。