phantomjs debian不显示中文_Python 爬虫:Selenium&PhantomJS 实例(一)

一次性付费进群,长期免费索取教程,没有付费教程。

进微信群回复公众号:微信群;QQ群:460500587

 教程列表  见微信公众号底部菜单 |   本文底部有推荐书籍 

5abb5423c148f7b2b606d2d0afdb75fd.png

微信公众号:计算机与网络安全

ID:Computer-network

用Selenium&PhantomJS完成的网络爬虫,最适合使用的情形是爬取有JavaScript的网站,但用来爬其他的站点也一样给力。在Scrapy爬虫中曾爬取过代理服务器的例子,这里再以Selenium&PhantomJS爬取代理服务器为示例,比较两者有什么不同。

1、准备环境

在Scrapy爬虫中获取了代理,需要自行验证代理是否可用。这次将在www.kuaidaili.com中获取已经验证好了的代理服务器。打开目标站点主页,如图1所示。

d5ab6b0f27643fc7e0346abe36035dd5.png

图1  目标主页

最终需要获取的有效数据就是代理服务器。从中可以看出网站也给出了API接口。从好的方面想,有现成的API接口获取代理服务器会更加方便;但从坏的方面考虑,因为本身就有API接口,那么限制爬虫恐怕就更加方便了。

单击API接口的链接查看一下,如图2所示。

41596e22c127bfcb4969f0f47350a54a.png

图2  API限制条件

还好,限制的条件不多,无须添加复杂的反爬虫。下面准备爬虫项目环境,打开Putty,连接登录到Linux,进入爬虫项目目录,执行命令:

mkdir -pv selenium/kuaidaili

cd $_

执行结果如图3所示。

0ac2ac1ebff001840a595be71b03e28c.png

图3  准备工作目录

下面就可以在该目录下编写爬虫文件getProxyFromKuaidaili.py。

2、爬虫代码

getProxyFromKuaidaili.py的代码如下:

1 #!/usr/bin/env python3

2 #-*- coding: utf-8 -*-

3 __author__ = 'hstking hst_king@hotmail.com'

4

5

6 from selenium import webdriver

7 from myLog import MyLog as mylog

8 import codecs

9

10 pageMax = 10 #爬取的页数

11 saveFileName = 'proxy.txt'

12

13 class Item(object):

14         ip = None #代理IP地址

15         port = None #代理IP端口

16         anonymous = None #是否匿名

17         protocol = None #支持的协议http or https

18         local = None #物理位置

19         speed = None #测试速度

20         uptime = None #最后测试时间

21

22 class GetProxy(object):

23         def __init__(self):

24                 self.startUrl = 'https://www.kuaidaili.com/free'

25                 self.log = mylog()

26                 self.urls = self.getUrls()

27                 self.proxyList = self.getProxyList(self.urls)

28                 self.fileName = saveFileName

29                 self.saveFile(self.fileName, self.proxyList)

30

31         def getUrls(self):

32                 urls = []

33                 for word in ['inha', 'intr']:

34                         for page in range(1, pageMax + 1):

35                                 urlTemp = []

36                                 urlTemp.append(self.startUrl)

37                                 urlTemp.append(word)

38                                 urlTemp.append(str(page))

39                                 urlTemp.append('')

40                                 url = '/'.join(urlTemp)

41                                 urls.append(url)

42                 return urls

43

44

45         def getProxyList(self, urls):

46                 proxyList = []

47                 item = Item()

48                 for url in urls:

49                         self.log.info('crawl page :%s' %url)

50                         browser = webdriver.PhantomJS()

51                         browser.get(url)

52                         browser.implicitly_wait(5)

53                         elements =browser.find_elements_by_xpath('//tbody/tr')

54                         for element in elements:

55                                 item.ip =element.find_element_by_xpath('./td[1]').text

56                                 item.port =element.find_element_by_xpath('./td[2]').text

57                                 item.anonymous =element.find_element_by_xpath('./td[3]').text

58                                 item.protocol =element.find_element_by_xpath('./td[4]').text

59                                 item.local =element.find_element_by_xpath('./td[5]').text

60                                 item.speed =element.find_element_by_xpath('./td[6]').text

61                                 item.uptime =element.find_element_by_xpath('./td[7]').text

62                                 proxyList.append(item)

63                                 self.log.info('add proxy %s:%s to list'%(item.ip, item.port))

64                         browser.quit()

65                 return proxyList

66

67         def saveFile(self, fileName, proxyList):

68                 self.log.info('add all proxy to %s' %fileName)

69                 with codecs.open(fileName, 'w', 'utf-8') as fp:

70                         for item in proxyList:

71                                 fp.write('%s \t' %item.ip)

72                                 fp.write('%s \t' %item.port)

73                                 fp.write('%s \t' %item.anonymous)

74                                 fp.write('%s \t' %item.protocol)

75                                 fp.write('%s \t' %item.local)

76                                 fp.write('%s \t' %item.speed)

77                                 fp.write('%s \r\n' %item.uptime)

78

79

80 if __name__ == '__main__':

81         GP = GetProxy()

按Esc键,进入命令模式后输入:wq保存结果,再将之前项目中用过的myLog.py复制到当前目录下。查看当前目录,执行命令:

tree

执行结果如图4所示。

74c8c3531af03602289be3b42d19dce4.png

图4  显示目录文件

运行爬虫文件,执行命令:

python3 getProxyFromKuaidaili.py

tree

执行结果如图5所示。

657a329de8f4f74711cbd68ae25ad401.png

图5  运行爬虫

这里的getProxyFromKuaidaili.log是用户定义的日志文件。Proxy.txt是最终得到的结果。Ghostdriver.log是运行PhantomJS的日志文件。

3、代码解释

这个爬虫程序本身并不复杂。第6~8行是导入所需的模块,其中myLog模块是自定义模块,也就是后来复制到当前目录的myLog.py文件。

第10~11行定义了2个全局变量。变量在类中定义也可以,放在这里是为了修改起来比较方便。

第13~20行定义了一个Item类。这个类的作用是为了方便装载爬虫获取的数据,基本包含了网页中的所有项。

第22~77行定义了一个从kuaidili站点中获取proxy的类。这个类包含了3个类函数。getUrls函数用于返回一个列表,这个列表包含了所有有效数据的网页地址。getProxyList函数从网页中获取有效数据,并保存到一个列表中。最后的saveFile函数将所有列表中的数据保存到文件中。

微信公众号:计算机与网络安全

ID:Computer-network

【推荐书籍】

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值