我想从几页中获取所有作为dutch word = english word
的单词列表
通过检查HTML,这意味着我需要从#mw-content-text
的子div中获取所有li
的所有ul
的所有文本
这是我的密码:
from selenium import webdriver
options = webdriver.ChromeOptions()
options.add_argument('headless') # start chrome without opening window
driver = webdriver.Chrome(chrome_options=options)
listURL = [
"https://duolingo.fandom.com/wiki/Dutch_(NL)_Skill:Basics_1",
"https://duolingo.fandom.com/wiki/Dutch_(NL)_Skill:Basics_2",
"https://duolingo.fandom.com/wiki/Dutch_(NL)_Skill:Phrases_1",
"https://duolingo.fandom.com/wiki/Dutch_(NL)_Skill:Negative_1",
]
list_text = []
for url in listURL:
driver.get(url)
elem = driver.find_elements_by_xpath('//*[@id="mw-content-text"]/div/ul')
for each_ul in elem:
all_li = each_ul.find_elements_by_tag_name("li")
for li in all_li:
list_text.append(li.text)
print(list_text)
这是输出
['man = man', 'vrouw = woman', 'jongen = boy', 'ik = I', 'ben = am', 'een = a/an', 'en = and', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
'', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '']
我不明白为什么有些li
文本即使xpath相同也无法检索(我通过开发者控制台的复制xpath对其中几个进行了双重检查)
您的脚本似乎还可以,但我会添加显式或隐式等待。 尝试等待页面上的所有元素都可见:
另外,您可以在声明
driver
之后立即添加driver.implicitly_wait(15)
输出:
更新: 我找到了一种使用CSS选择器的更可靠的方法。请试一试:
更新2 在试图理解原因后,我发现广告占据了大部分的加载时间。所以我添加了
wait.until(EC.visibility_of_all_elements_located((By.CSS_SELECTOR, "div[id*='google_ads_iframe'] ")))
等待所有广告加载我还通过删除最后一个
li
将第二个等待更改为.mw-parser-output>ul
。我认为没有必要。您也可以尝试删除第二个等待,看看是否有帮助尝试在解析页面之前等待页面完全加载,一种方法是使用^{} 方法:
编辑:使用
BeautifulSoup
:输出(截断):
如果希望输出为
list
,请执行以下操作:之后
你需要增加一些睡眠,我想
time.sleep(1)
就足够了,而且只有在那之后你才能这样做您的问题是由于对
visibility_of_all_elements_located
功能的误解造成的。它实际上并不是在等待通过它的定位器找到的所有元素都变为可见,它不知道等待的元素数量。
因此,一旦它检测到至少1个元素与您的定位器可见匹配,它将返回检测到的元素列表,程序将继续前进。
有关这些方法的更多详情见官方文件
相关问题 更多 >
编程相关推荐