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

时间:2018-11-23 11:24:50

标签: python selenium web-scraping

我正在尝试使用Python中的Selenium(通过Chrome Web驱动程序)来抓取以下网页。

https://www.betexplorer.com/soccer/argentina/superliga/argentinos-jrs-talleres-cordoba/ptSIK7kB/#ah 1

我只希望收集庄家为Bet365的数据行。

在这种情况下,我已经能够获取所有行。但是,我正在努力抓取在单击值时出现的“ onclick”表中的信息:

enter image description here

上图显示了表ARCHIVE ODDS,当单击5.90时出现。

目的是从Bet365是庄家的所有行的每个表中收集信息。

到目前为止,我一直尝试使用CSS选择器来查找所有“ onclick”链接:

table_links = browser.find_elements_by_css_selector("span[onclick*='16);']")

然后遍历每个table_links,单击每个,并使用xpath刮取出现的数据:

bet365table = []
for i in table_links:
    i.click()
    xx = browser.find_element_by_xpath("//TBODY[@id='aodds-tbody']")
    bet365table.append(xx)

但是,每次都失败,并显示错误消息,指出该元素不可点击。

1 个答案:

答案 0 :(得分:1)

您还可以模仿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()