我正在研究一個分析SuperCluster 宇航員資料庫的專案。我正在嘗試將每個宇航員的資料刮成一個漂亮、干凈的 pandas 資料框。有大量關于每位宇航員的描述性資訊可供抓取。但是,當您單擊宇航員時,會顯示更多資訊 - 您可以獲得他們傳記的幾段。我想抓取它,但需要自動執行某種操作,通過該操作單擊鏈接,然后從我被路由到的頁面抓取資料。
到目前為止,這是我的嘗試:
from bs4 import BeautifulSoup
import pandas as pd
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from webdriver_manager.chrome import ChromeDriverManager
import time
data = []
url = 'https://www.supercluster.com/astronauts?ascending=false&limit=300&list=true&sort=launch order'
options = Options()
options.add_argument("--headless")
driver = webdriver.Chrome(ChromeDriverManager().install(),options=options)
driver.maximize_window()
driver.get(url)
time.sleep(10)
bio_data = []
soup = BeautifulSoup(driver.page_source, 'lxml')
driver.close()
tags = soup.select('.astronaut_cell.x')
for item in tags:
name = item.select_one('.bau.astronaut_cell__title.bold.mr05').get_text()
for i in name:
btn = driver.find_element_by_css_selector('cb.super_card__link_grid').click()
bio = item.select_one('px1.pb1').get_text()
bio_data.append([bio])
data.append([name,bio_data])
cols=['name','bio']
df = pd.DataFrame(data,columns=cols)
print(df)
我收到一條錯誤訊息:
InvalidSessionIdException: Message: invalid session id
不知道如何解決這個問題。有人可以幫我指出正確的方向嗎?任何幫助,將不勝感激!
uj5u.com熱心網友回復:
每個鏈接都包含單獨的頁面和生物資料。所以沒有點擊,你必須收集每個 url 并且必須再次發送請求以從每個/單個頁面收集生物資料。
腳本:
from bs4 import BeautifulSoup
import pandas as pd
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from webdriver_manager.chrome import ChromeDriverManager
import time
data = []
url = 'https://www.supercluster.com/astronauts?ascending=false&limit=300&list=true&sort=launch order'
options = Options()
options.add_argument("--headless")
driver = webdriver.Chrome(ChromeDriverManager().install(),options=options)
driver.maximize_window()
driver.get(url)
time.sleep(5)
Name=[]
bio=[]
soup = BeautifulSoup(driver.page_source, 'lxml')
for name in soup.select('.bau.astronaut_cell__title.bold.mr05'):
name =name.text
Name.append(name)
#print(name)
urls=soup.select('a[]')
for url in urls:
abs_url='https://www.supercluster.com' url.get('href')
print(abs_url)
options = Options()
options.add_argument("--headless")
driver = webdriver.Chrome(ChromeDriverManager().install(),options=options)
driver.maximize_window()
driver.get(abs_url)
time.sleep(5)
soup = BeautifulSoup(driver.page_source, 'html.parser')
driver.close()
for astro in soup.select('div.h4')[0:8]:
astro=astro.text
bio.append(astro)
df = pd.DataFrame(data=list(zip(Name,bio)),columns=['name','bio'])
print(df)
輸出:
name bio
0 Nield, George b. Jul 31, 1950
1 Kitchen, Jim Human
2 Lai, Gary Male
3 Hagle, Marc President Commercial Space Technologies
4 Hagle, Sharon b. Jul 31, 1950
.. ... ...
295 Wilcutt, Terrence Lead Operations Engineer
296 Linenger, Jerry b. Oct 1, 1975
297 Mukai, Chiaki Human
298 Thomas, Donald Male
299 Chiao, Leroy People's Liberation Army Air Force Data Missin...
[300 rows x 2 columns]
uj5u.com熱心網友回復:
無效的SessionIdException
如果給定的會話 ID 不在活動會話串列中,則會發生InvalidSessionIdException,這表明會話不存在或會話不活動。
這個用例
可能是Selenium驅動的ChromeDriver啟動谷歌瀏覽器無頭 瀏覽背景關系被檢測為機器人會話即將終止。
參考
您可以在以下位置找到一些相關的詳細討論:
- selenium.common.exceptions.WebDriverException:訊息:通過 Python 使用 Selenium 與 ChromeDriver 和 Chrome 的會話 ID 無效
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/457809.html
標籤:Python 硒 美丽的汤 硒铬驱动程序 谷歌浏览器无头
