第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用 python 在網(wǎng)站上抓取“onclick”對象表

使用 python 在網(wǎng)站上抓取“onclick”對象表

MMTTMM 2023-10-30 10:51:40
我正在嘗試抓取此鏈接的數(shù)據(jù):page。如果單擊向上箭頭,您會注意到月份部分中突出顯示的日期。單擊突出顯示的日期,將出現(xiàn)包含該天已啟動投標的表格。我需要做的就是獲取每個表中日歷中每個突出顯示的日期的數(shù)據(jù)。每天可能有一次或多次招標(最多 7 次)。點擊時出現(xiàn)表格我已經(jīng)用 bs4 做了一些網(wǎng)絡(luò)抓取,但是我認為這是我不太熟悉的 selenium 的工作(如果我錯了,請糾正我)。到目前為止,我已經(jīng)成功地通過 XPATH 找到了箭頭元素來導航日歷并顯示更多月份。之后,我嘗試單擊隨機的一天(在下面的代碼中,我單擊了 2020 年 3 月 30 日),在檢查時的 html 中會出現(xiàn)一個名為“tenders-table cloned”的 html 對象。無論您單擊哪一天,對象名稱都保持不變。我現(xiàn)在很困惑,嘗試通過迭代和/或打印該對象表中的內(nèi)容來選擇,它要么說該對象不可迭代,要么是None。from selenium import webdriverchrome_path = r"C:\Users\<name>\chromedriver.exe"driver = webdriver.Chrome(chrome_path)driver.get("http://www.ibex.bg/bg/данни-за-пазара/централизиран-пазар-за-двустранни-договори/търговски-календар/")driver.find_element_by_xpath("""//*[@id="content"]/div[3]/div/div[1]/div/i""").click()driver.find_element_by_xpath("""//*[@id="content"]/div[3]/div/div[2]/div[1]/div[3]/table/tbody/tr[6]/td[1]""").click()請告知我如何繼續(xù)從彈出表格中提取數(shù)據(jù)。
查看完整描述

2 回答

?
飲歌長嘯

TA貢獻1951條經(jīng)驗 獲得超3個贊

好吧,我認為沒有理由使用selenium這種情況,因為它會減慢你的任務速度。

該網(wǎng)站加載了JavaScript事件,一旦頁面加載,該事件就會動態(tài)呈現(xiàn)其數(shù)據(jù)。

requests庫將無法JavaScript動態(tài)渲染。所以你可以使用seleniumrequests_html。事實上有很多模塊可以做到這一點。

現(xiàn)在,我們確實有另一個選項,可以跟蹤數(shù)據(jù)的呈現(xiàn)位置。我能夠找到用于檢索數(shù)據(jù)并將其呈現(xiàn)給用戶端的XHR請求。back-end?API

您可以XHR通過打開開發(fā)人員工具獲取請求并檢查網(wǎng)絡(luò)并檢查XHR/JS根據(jù)調(diào)用類型發(fā)出的請求,例如fetch

import requests

import json


data = {

? ? 'from': '2020-1-01',

? ? 'to': '2020-3-01'

}



def main(url):

? ? r = requests.post(url, data=data).json()

? ? print(json.dumps(r, indent=4)) # to see it in nice format.

? ? print(r.keys())



main("http://www.ibex.bg/ajax/tenders_ajax.php")

因為我只是一個懶惰的編碼員:我會這樣做:


import requests

import re

import pandas as pd

import ast

from datetime import datetime


data = {

? ? 'from': '2020-1-01',

? ? 'to': '2020-3-01'

}



def main(url):

? ? r = requests.post(url, data=data).json()

? ? matches = set(re.findall(r"tender_date': '([^']*)'", str(r)))

? ? sort = (sorted(matches, key=lambda k: datetime.strptime(k, '%d.%m.%Y')))

? ? print(f"Available Dates: {sort}")

? ? opa = re.findall(r"({\'id.*?})", str(r))

? ? convert = [ast.literal_eval(x) for x in opa]

? ? df = pd.DataFrame(convert)

? ? print(df)

? ? df.to_csv("data.csv", index=False)



main("http://www.ibex.bg/ajax/tenders_ajax.php")

輸出:在線查看


查看完整回答
反對 回復 2023-10-30
?
嚕嚕噠

TA貢獻1784條經(jīng)驗 獲得超7個贊

請嘗試以下解決方案


driver.maximize_window()

wait = WebDriverWait(driver, 20)  



elemnt=wait.until(EC.presence_of_element_located((By.XPATH, "//body/div[@id='wrapper']/div[@id='content']/div[@class='tenders']/div[@class='form-group']/div[1]/div[1]//i")))

    elemnt.click()

    elemnt1=wait.until(EC.presence_of_element_located((By.XPATH, "//div[@class='form-group']//div[1]//div[3]//table[1]//tbody[1]//tr[6]//td[1]")))

    elemnt1.click()

    lists=wait.until(EC.presence_of_all_elements_located((By.XPATH, "//table[@class='tenders-table cloned']")))

    for element in lists:

         print element.text


查看完整回答
反對 回復 2023-10-30
  • 2 回答
  • 0 關(guān)注
  • 229 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號