私はPythonでスクリプトを書いて、Webページからテーブルを削るためにセレニウムと組み合わせました。スクリプトを実行すると、テーブルがフェッチされます。しかし、私が今直面している唯一の問題は、私のスクレーパーがそのテーブルから "th"タグを解析するのに失敗したことです。私はすでにコメントしたあなたの考慮のために私のスクリプトの "th"タグを指定しました。どのようにしてその行を修正して、そのテーブルの全内容を取得できますか?私はその行のコメントを解除し、現在実行している場合、それは次のエラーをキャッチ:テーブル要素の嘘は、リンクをクリック見ることができ、その中スクリプトにテーブルヘッダーを含めることができません
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.WebDriverException: Message: unknown error: 'value' must be a string
要素: 「https://www.dropbox.com/s/cytp4m0m00dmu2f/Table%20elements.txt?dl=0」
私がきたスクリプトあなたはそれが文字列である必要がありながらfind_elements_by...()
に値のリストを渡すためにしようとしている
from selenium import webdriver
import time
driver = webdriver.Chrome()
driver.get("http://www.hko.gov.hk/cis/dailyExtract_e.htm?y=2015&m=1")
time.sleep(5)
table_data = driver.find_element_by_xpath("//table[@id='t1']")
list_rows = []
for items in table_data.find_elements_by_xpath(".//tr"):
list_cells = []
for item in items.find_elements_by_xpath('.//td[@class="td1_normal_class" or @class="td1_year_class"]'):
# for item in items.find_elements_by_xpath(['.//th[@class="td_normal_class"]', './/td[@class="td1_normal_class" or @class="td1_year_class"]']):
list_cells.append(item.text)
list_rows.append(list_cells)
for data in list_rows:
print(data)
driver.quit()
あなたはどう思いますか、これは '[「.// [@クラス=『td_normal_class』]番目の」'行う必要があります:あなたは、あなたの
XPath
は、線の下の両方th
またはtd
試みを一致させたい場合は?最初の一重引用符は大括弧で囲まれており、二番目に外側にあることに注意してください。 – Anderssonお返事ありがとうございました。あなたをループに迎え入れることは、常に大きな喜びです。私はそれを意図的にやった。私はこのパターン(['th'、 'td'])に従おうとしました。とにかく、あなたがもっと見てみると、私はこのようにしようとしました。(['////[[[email protected]="td_normal_class "] '、' .//td[@class="td1_normal_class 'または@ class =" td1_year_class " ] '])。上で使用した角カッコは、その中のパターン全体を囲むためのものです。もう一度ありがとうございます。 – SIM
正確な出力を共有できますか? – Andersson