Selenium+PhantomJS实现简易有道翻译爬虫

Selenium一款自动化测试工具,当然用来写爬虫也是没有问题的。它支持Chrome、Safari、Firefox等主流界面式浏览器,另外它也支持多种语言开发,比如 Java,C,Ruby,Python等。PhantomJS是一个无界面的,可脚本编程的WebKit浏览器引擎,当我们爬一些网站,页面全js渲染,如果逐个去分析后台请求,对于web高手无所谓,但对于像我这样连js都不太懂的小白来说,简直崩溃。这个时候用PhantomJS就可以帮助我们像浏览器一样渲染js处理的页面。

代码很简单,关键地方已注释:

 1 #!/usr/bin/env python
 2 # -*- coding: utf-8 -*-
 3 # @Time     : 2018/1/5 16:55
 4 # @Author   : Eivll0m
 5 # @Site     : https://github.com/Eivll0m
 6 # @File     : YD_dict.py
 7 # @Software : PyCharm
 8 
 9 from selenium import webdriver
10 from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
11 import sys
12 reload(sys)
13 sys.setdefaultencoding('utf8')
14 
15 class YoudaoDict:
16     def __init__(self):
17         self.url = 'http://fanyi.youdao.com'
18         self.agent = 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36'
19         self.dcap = dict(DesiredCapabilities.PHANTOMJS)
20         self.dcap["phantomjs.page.settings.userAgent"] = self.agent
21         self.service_args = []
22         self.service_args.append('--load-images=no')  ##关闭图片加载
23         self.service_args.append('--disk-cache=yes')  ##开启缓存
24         self.service_args.append('--ignore-ssl-errors=true')  ##忽略https错误
25         self.browser = webdriver.PhantomJS('D:\\Program Files\\phantomjs-2.1.1-windows\\bin\\phantomjs.exe',service_args=self.service_args)
26 
27     def transTarget(self):
28         browser = self.browser
29         browser.get(self.url)
30         browser.implicitly_wait(3)
31         text = browser.find_element_by_id('inputOriginal')
32         text.clear()
33         while 1:
34             key = str(raw_input('请输入您需要翻译的内容:'))
35             if key == 'quit':
36                 browser.quit()
37                 exit()
38             if key:
39                 break
40         text.send_keys(key.decode('utf-8'))
41         while 1:
42             try:
43                 bro = browser.find_element_by_css_selector('#transTarget > p > span')
44                 break
45             except:
46                 print '还未定位到元素!'
47         return bro.text
48 
49 if __name__ == '__main__':
50     D = YoudaoDict()
51     while 1:
52         print D.transTarget()

运行效果:

posted on 2018-02-20 16:50  K‘e0llm  阅读(601)  评论(0编辑  收藏  举报

导航