簡體   English   中英

在Python中使用Selenium抓取“ onclick”表

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM