背英语单词,百度,谷歌都获取不到六级单词对应的美式音标。所以无奈,只能用爬虫自给自足。
-
方案:遍历单词,使用在线字典(
沪江小
D
)进行一个个的获取。 - 在线字典都有反扒机制,通过request获取单词失效,因为本机浏览器为chrome,故使用selenium+chromedriver进行数据爬取。
-
使用chromedriver需要与浏览器版本一一对应,首先确认chrome的版本(设置-关于,即可见),然后登入
CNPM Binaries Mirror
选择对应或临近版本进行下载。
具体代码如下:
#!/usr/bin/env python
# coding: utf-8
# In[1]:
# 对应数据 https://registry.npmmirror.com/binary.html?path=chromedriver/
# In[2]:
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import time
# In[3]:
browser = webdriver.Chrome(executable_path="./chromedriver3") # 打开浏览器
browser.implicitly_wait(5)
browser.maximize_window() # 最大化窗口
browser.minimize_window() # 最小化窗口
url='https://dict.hjenglish.com/'#以该链接为例
browser.get(url)#访问相对应链接
# In[4]:
test = browser.find_element_by_class_name('search-input') #输入账号
test.send_keys('aboard')
time.sleep(1)
browser.find_element_by_class_name('button').click()
time.sleep(5)
# In[5]:
dict_list = ['town','diserve','dioxygen']
# In[6]:
import random
total_result_data = []
error_data = []
for cur_word in dict_list:
try:
random_int = random.randint(3, 10)
input_txt = browser.find_element_by_class_name('search-input') #输入账号
input_txt.clear()
input_txt.send_keys(cur_word)
time.sleep(1)
browser.find_element_by_class_name('button').click()
time.sleep(random_int)
content = browser.find_elements_by_class_name('pronounce-value-us')
content_detail = [i.text for i in content]
pronounce_us = content_detail[0][1:-1]
content = browser.find_elements_by_class_name('pronounce-value-us')
content_detail = [i.text for i in content]
pronounce_en = content_detail[0][1:-1]
translate_content = browser.find_elements_by_class_name('simple')
translate_detail = [i.text.strip().replace("\n", " ") for i in translate_content]
translate_str = " ".join(translate_detail)
word_format = cur_word + "\t" + pronounce_us + "\t\t" + translate_str + '\t' + pronounce_en
print(word_format)
total_result_data.append(word_format)
except Exception as e:
print("{},报错:{}".format(cur_word, e))
error_data.append(cur_word)
# In[7]:
display(error_data)
total_result_data
# In[8]:
time.sleep(30)
browser.close()
# In[ ]:
运行结果如下:
格式:单词\t美式音标\t单词意思\t英式音标
代码很简单,不完美之处,有两点:
1. 未添加地址池,如果短时间过多访问,容易被屏蔽网络地址。
2. 因为单词界面比较单一,都是重复结果。 所以未使用隐性等待,而是显性等待。
- 显性等待,设定固定的等待条件和等待上限。
- 隐性等待,跳转后,监听新页面的元素,发现元素存在,就自动向下执行。对应的函数名字:from selenium.webdriver.support.wait import WebDriverWait
版权声明:本文为nanjifengzi原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。