phantomjs debian不显示中文_Python 爬虫:Seleniumamp;PhantomJS 实例(一)
一次性付费进群,长期免费索取教程,没有付费教程。
进微信群回复公众号:微信群;QQ群:460500587
教程列表 见微信公众号底部菜单 | 本文底部有推荐书籍
微信公众号:计算机与网络安全
ID:Computer-network
用Selenium&PhantomJS完成的网络爬虫,最适合使用的情形是爬取有JavaScript的网站,但用来爬其他的站点也一样给力。在Scrapy爬虫中曾爬取过代理服务器的例子,这里再以Selenium&PhantomJS爬取代理服务器为示例,比较两者有什么不同。
1、准备环境
在Scrapy爬虫中获取了代理,需要自行验证代理是否可用。这次将在www.kuaidaili.com中获取已经验证好了的代理服务器。打开目标站点主页,如图1所示。
图1 目标主页
最终需要获取的有效数据就是代理服务器。从中可以看出网站也给出了API接口。从好的方面想,有现成的API接口获取代理服务器会更加方便;但从坏的方面考虑,因为本身就有API接口,那么限制爬虫恐怕就更加方便了。
单击API接口的链接查看一下,如图2所示。
图2 API限制条件
还好,限制的条件不多,无须添加复杂的反爬虫。下面准备爬虫项目环境,打开Putty,连接登录到Linux,进入爬虫项目目录,执行命令:
mkdir -pv selenium/kuaidaili
cd $_
执行结果如图3所示。
图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所示。
图4 显示目录文件
运行爬虫文件,执行命令:
python3 getProxyFromKuaidaili.py
tree
执行结果如图5所示。
图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
【推荐书籍】
phantomjs debian不显示中文_Python 爬虫:Seleniumamp;PhantomJS 实例(一)相关推荐
- python2.7显示中文_Python 2.7中文显示与处理方法
在学习使用Python的过程中,一定会遇到文字输入与处理,这就不可避免的会使用中文字符.但是Python2.7默认使用的字符集是ASCII,并不支持中文字符的显示与处理,因些如果要在Python中处理 ...
- debian 8显示中文
切换选择语言 dpkg-reconfigure locales 进入选择: zh_CN GB2312 zh_CN.GBK GBK zh_CN.UTF-8 UTF-8 en_US.UTF-8 UTF-8 ...
- python画图显示中文_Python的matplotlib库画图不能显示中文问题解决
有两种解决办法: 一种是在代码里设置为能显示中文的字体,如微软雅黑(msyh.ttf)和黑体(simsun.ttc) 如下在要画图的代码前添加: import matplotlib.pyplot as ...
- pythonscrapy爬虫_Python 爬虫:Scrapy 实例(二)
原标题:Python 爬虫:Scrapy 实例(二) 稍微增加点难度,做个所需项目多一点的,并将的结果以多种形式保存起来.我们就从网络天气预报开始. 首先要做的是确定网络天气数据的来源.打开百度,搜索 ...
- python窗口显示表格_Python爬虫之GUI图表
关于Python爬虫系列的这篇文章我很早就想写了,但由于我前两周一直在研究vscode插件开发方面,就没去写文章.所幸目前vscode插件开发的知识了解的差不多了,是时候写了,哈哈.需要说明的是,我并 ...
- python 显示中文_Python|绘制个性化数据的动态图表及解决中文显示问题……
先安装各个库文件,以下为我的win10系统安装的Python版本及各个库文件的版本,安装命令如下: pip3 install 库文件名==版本号 -i https://pypi.tuna.tsingh ...
- 微博爬取显示全文_Python爬虫---chrome driver爬取微博(教你几十行代码爬取财宝宝微博长文)...
0.学习路径示意图 各位小伙伴大家好,这次博主分享的是利用虚拟浏览器ChromeDriver去爬取微博大V--财宝宝的微博长文. 1.ChromeDriver简介 WebDriver是一个开源工具,用 ...
- python代码html显示数据_Python爬虫基础之认识html和学习数据提取(上)
我:我已经学会了基本的python,接下来可以学什么鸭? 惨绿青年:接下来可以学习制作python爬虫了,但还是需要学习相关的知识. 我:什么知识鸭? 惨绿青年:网页的相关知识.我们看到的网页一般是h ...
- python画图标题怎么显示中文_python画图如何显示中文标题?
我们用Python进行数据可视化,绘制各种图形时,往往会遇到明明数据都设置对了,但是在图形上中文标题显示不出来. 例如绘制直方图,程序如下:plt.hist(roll_list, bins=range ...
最新文章
- 微软亚研院提出用于语义分割的结构化知识蒸馏 | CVPR 2019
- awk匹配以aaa开头,以bbb结尾的内容,同时aaa和bbb之间还包含ccc
- Win10上线摸鱼神器,已经被玩疯了!
- 已有打开的与此 Command 相关联的 DataReader,必须首先将它关闭
- dart系列之:元世界pubspec.yaml文件详解
- 禁用CMFCRibbonApplicationButton的单击和双击事件
- 一个备份sql server文件.bak还原成两个数据库
- Linux 编译pe,如何在PE中将PE(可移植可执行文件)格式转换为ELF
- 实现一个简单的HTTP
- WinAPI: CreatePen - 建立画笔
- [LCT刷题][连通性维护] P3950 部落冲突
- 微信小程序在智能家居物联网中的应用
- SAP JCo 3.0 下载
- 解析无线地磁传感器的防水设计
- 关于adsl宽带猫的一个奇怪问题
- android 自定义输入法布局,Android自定义输入法使用方法
- Devops 开发运维基础篇之使用Maven构建项目
- (转)银河麒麟V10sp1服务器系统安装redis不能使用的解决办法
- 花朝节汉服摄影征集、照片征集、视频征集小程序
- Soul新发布录音有电流 杂音 m4a文件夹 解决方法