![](/img/trans.png)
[英]Python Web scraping using Selenium - "onclick" to download
[英]Scraping an 'onclick' table with Selenium in Python
我正在嘗試使用Python中的Selenium(通過Chrome Web驅動程序)抓取以下網頁。
https://www.betexplorer.com/soccer/argentina/superliga/argentinos-jrs-talleres-cordoba/ptSIK7kB/#ah 1
我只希望收集庄家為Bet365的數據行。
在這種情況下,我已經能夠獲取所有行。 但是,我正在努力在單擊值時出現的“ onclick”表中抓取信息:
上圖顯示了表ARCHIVE ODDS,單擊5.90時將顯示該表。
目的是從Bet365是庄家的所有行的每個表中收集信息。
到目前為止,我一直嘗試使用CSS選擇器來查找所有“ onclick”鏈接:
table_links = browser.find_elements_by_css_selector("span[onclick*='16);']")
然后遍歷每個table_links,單擊每個table_links,然后使用xpath抓取出現的數據:
bet365table = []
for i in table_links:
i.click()
xx = browser.find_element_by_xpath("//TBODY[@id='aodds-tbody']")
bet365table.append(xx)
但是,每次都會失敗,並顯示錯誤消息,指出該元素不可單擊。
您還可以模仿XHR請求並獲取JSON響應。 Bet365的ID為16。您可以使用CSS選擇器測試合格行
import requests
import pandas as pd
import json
from pandas.io.json import json_normalize
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
d = webdriver.Chrome()
d.get("https://www.betexplorer.com/soccer/argentina/superliga/argentinos-jrs-talleres-cordoba/ptSIK7kB/#ah")
WebDriverWait(d,10).until(EC.visibility_of_all_elements_located((By.CSS_SELECTOR, ".in-bookmaker-logo-link.in-bookmaker-logo-link--primary.l16")))
base = 'https://www.betexplorer.com/archive-odds/'
links = d.find_elements_by_css_selector("[onclick$=', 16);']")
extracted_links = [link.get_attribute("onclick").strip("load_odds_archive(this, '").strip("', 16);") for link in links]
json_links = [base + link + '/16/?_=1' for link in extracted_links]
for link in json_links:
res = requests.get(link)
data= json.loads(res.content)
data = json_normalize(data)
print(data)
d.quit()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.