python+selenium 爬虫

  • Post author:
  • Post category:python



背英语单词,百度,谷歌都获取不到六级单词对应的美式音标。所以无奈,只能用爬虫自给自足。

  • 方案:遍历单词,使用在线字典(

    沪江小

    ​​​​​​​

    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 版权协议,转载请附上原文出处链接和本声明。