[英]Scraping attributes from drop down sub menu
我正在嘗試從網站上抓取特定數據。 數據僅存在於另一個下拉菜單的下拉子菜單中,並且僅在選擇主下拉菜單的特定選項后才生成。 我正在使用硒的選擇類來通過兩個菜單單擊-該功能正常工作。 但是我在抓取數據時遇到問題。
我已經確認通過將完整的soup.prettify保存到文件並在其中找到來生成數據。 但是,每當我使用soup.find(),soup.findAll()或其他搜索時,我都會收到空對象或空列表
from time import sleep
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.support.select import Select
from bs4 import BeautifulSoup
login = {
"handle": "login",
"pass": "password"
}
def ScanBot():
driver.get('http://www.swcombine.com/members/cockpit/travel/index.php?tft=Hyperspace')
sleep(3)
sectorOptions = Select(driver.find_element_by_name('sectors')).options
for i in range (1, len(sectorOptions)):
Select(driver.find_element_by_name('sectors')).select_by_index(i)
sleep(3)
list = Select(driver.find_element_by_name('systemID')).options
for b in range (1, len(list)):
#Select(driver.find_element_by_name('systemID')).select_by_index(b)
text = driver.page_source
soup = BeautifulSoup(text, 'html.parser')
print(soup.find_all('select','id="systemID"'))
if __name__ == '__main__':
chrome_options = Options()
chrome_options.add_argument('--ignore-certificate-errors')
chrome_options.add_argument('--incognito')
# chrome_options.add_argument('--headless')
chrome_options.add_argument("--proxy-server=socks5://127.0.0.1:9150")
driver = webdriver.Chrome(executable_path='./chromedriver', options=chrome_options)
LaunchBot(login)
ScanBot()
每次迭代僅打印[]個空結果
<select name="systemID" id="systemID" onchange="setCoordsFromSystem()"> <option data-galx="71" data-galy="-166">-- System --</option> <option data-galx="-24" data-galy="-76">Abregado</option> <option data-galx="-26" data-galy="-86">Belgaroth</option> <option data-galx="-38" data-galy="-87">Delphon</option> <option data-galx="-24" data-galy="-81">Dentaal</option> <option data-galx="-19" data-galy="-87">Diamal</option> <option data-galx="-21" data-galy="-70">Eamus</option> <option data-galx="-10" data-galy="-72">Frego</option> <option data-galx="0" data-galy="-82">Iphigin</option> <option data-galx="-19" data-galy="-74">Plexis</option> <option data-galx="-30" data-galy="-80">Steelious</option> </select>
這是我需要獲得Best的源代碼的一部分,將返回列表,如下所示:
-24,-76阿布雷加多
-26,-86貝爾加洛斯
等
非常感謝您的協助
我認為問題是print(soup.find_all('select','id="systemID"'))
部分更改為:
print(soup.find_all('select',attrs ={'id':'systemID'}))
您將看到目標輸出,並且可以訪問以下數據:
datas =soup.find_all('select',attrs ={'id':'systemID'})
for all1 in datas:
option = all1.find_all('option')
for getdatas in option:
print (getdatas.text)
print (getdatas['data-galx'])
print (getdatas['data-galy'])
輸出:
-- System --
71
-166
Abregado
-24
-76
Belgaroth
-26
-86
Delphon
-38
-87
Dentaal
-24
-81
Diamal
-19
-87
Eamus
-21
-70
Frego
-10
-72
Iphigin
0
-82
Plexis
-19
-74
Steelious
-30
-80
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.