我想收集 GitHub 用戶從 2004 年到現在的每月貢獻,如圖所示。
并將每月資料輸出到帶有相應月份列的csv檔案中(例如,2022_10)。這些文本的 Xpath 是:
#//*[@id="js-contribution-activity"]/div/div/div/div/details/summary/span[1]
這是我的 csv 檔案 (df1) 的樣子:
| 領英網站 | GitHub 網站 | 用戶 | |
|---|---|---|---|
| 0 | https://www.linkedin.com/in/chad-roberts-b86699/ | https://github.com/crobby | 克羅比 |
| 1 | https://www.linkedin.com/in/grahamdumpleton/ | https://github.com/GrahamDumpleton | 格雷厄姆鄧普頓 |
這是我迄今為止最好的嘗試:
for index, row in df1.iterrows():
try:
user = row['user']
except:
pass
for y in range(2004, 2023):
for m in range(1, 13):
try:
current_url = f'https://github.com/{user}?tab=overview&from={y}-{m}-01&to={y}-{m}-31'
print(current_url)
driver.get(current_url)
time.sleep(0.1)
contribution = driver.findElement(webdriver.By.xpath("//*[@id='js-contribution-activity']/div/div/div/div/details/summary/span[1]")).getText();
df1.loc[index, f'{str(y)}_{str(m)}'] = contribution
except:
pass
print(df1)
df1.to_csv('C:/Users/fredr/Desktop/output today.csv')
我無法弄清楚為什么沒有輸出。謝謝你的幫助。
uj5u.com熱心網友回復:
您需要使用WebDriverWait expected_conditions顯式等待。
我看到那里有多個contribution欄位,因此您需要將所有這些元素收集為一個串列,然后迭代該串列以提取每個元素文本。
你需要改進你的定位器,它們應該盡可能短而清晰。
您還混合了 Java 和 Python 代碼。getText()并且;來自Java...
試試這個:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
wait = WebDriverWait(driver, 10)
driver.get(current_url)
contributions = wait.until(EC.visibility_of_all_elements_located((By.XPATH, "//*[@id='js-contribution-activity']//summary/span[1]")))
for contribution in contributions:
print(contribution.text)
uj5u.com熱心網友回復:
我沒有用 selenium 嘗試過,只是用requests這個lxmlxpath 運算式
//div[@class="contribution-activity-listing float-left col-12 "]//details[@class="Details-element details-reset"]/summary/span[1]
似乎作業。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/529758.html
上一篇:PythonSelenium.send_keys()在元素更改類后不起作用
下一篇:Linux檔案描述符
