からすべてのデータをフェッチするまで、私は https://www.nets.eu/dk-da/l%C3%B8sninger/Registreringsnumreをクリックして「ショーの詳細」ボタンテーブル内のすべてのデータが示されており、テーブル
このページの表からすべてのデータをフェッチする必要がある。しかし、私は「表示し、より」をクリックする必要がありますボタンをクリックすると、すべてのデータが表示されるまで表示されます。
「表示する」ボタンを何回クリックしても、テーブルには30行の行が残ります。
import sys
import time
from pyvirtualdisplay import Display
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutException
import json
class Scrape:
display = None
driver = None
def __init__(self):
# Start display
self.display = Display(visible=0, size=(800, 600))
self.display.start()
# Init driver
self.driver = webdriver.Firefox()
self.driver.wait = WebDriverWait(self.driver, 5)
self.load_page()
time.sleep(5)
self.close()
def load_page(self):
data = []
url = 'https://www.nets.eu/dk-da/l%C3%B8sninger/Registreringsnumre'
xpath = '//table[@class="itera-DataTable"]/tbody/tr'
self.driver.get(url)
try:
table = self.driver.wait.until(EC.presence_of_element_located(
(By.CLASS_NAME, 'itera-DataTable')))
print 'Table found!'
i = 1
while True:
button = self.driver.wait.until(EC.presence_of_element_located(
(By.CLASS_NAME, 'itera-nextbatchbox')))
print 'Button %d found!' % (i)
row_count = len(self.driver.find_elements_by_xpath(xpath))
print row_count
button.click()
i += 1
if i > 5:
break
i = 1
for tr in self.driver.find_elements_by_xpath(xpath):
print 'TR %d' % (i)
tr_data = []
tds = tr.find_elements_by_tag_name('td')
if tds:
tr_data.append([td.text for td in tds])
data.append(tr_data)
i += 1
#print json.dumps(data)
except TimeoutException:
self.error('Table not found')
def error(self, str):
self.close()
print>>sys.stderr, str
sys.exit(1)
def close(self):
if self.driver is not None:
self.driver.quit()
self.display.stop()
if __name__ == '__main__':
Scrape()
どのくらいのデータがデータベースにありますか?何ページのデータが必要ですか?あなたはこのウェブサイトを掻き取る許可を持っているので、dbデータにアクセスできますか? – SiKing
Itera.RegNumbers.jsで定義されている鉱石のリンクのclickイベント関数は、あなたの問題の考えられる理由は2つの側面から来ていると思います。あなたは、より多くのリンクを参照するには、ブラウザがレンダリングページでビジー状態で、クリックイベントに応答することはできませんをクリックする前に、ページの読み込みを待つことはありません。 2. Itera.RegNumbers.jsが読み込みを完了していないことを確認するリンクをクリックします。 self.driver.get(url)の後にスリープ15秒を追加するのが簡単な検出方法です。 – yong