使用Selenium&PhantomJS的方式爬取代理
前面已经爬取了代理,今天我们使用Selenium&PhantomJS的方式爬取快代理 :快代理 - 高速http代理ip每天更新。
首先分析一下快代理,如下
使用谷歌浏览器,检查,发现每个代理信息都在tr里面,每个tr里面包含多个td,就是IP的信息。
这个结构我们可以通过多种方法抓取,例如bs4、xpath、selenium等
这里我们演示selenium方法。具体解释在下面代码中都有的。
from selenium import webdriver class Item(object):
'''
模拟scrapy框架
写item类
用以表示每个代理
'''
ip = None #IP地址
port = None #端口
anonymous = None #是否匿名
type = None #http 或者https
local = None #物理地址
speed = None #速度 class GetProxy(object):
def __init__(self):
self.starturl = 'http://www.kuaidaili.com/free/inha/'
self.urls = self.get_urls()
self.proxylist = self.get_proxy_list(self.urls)
self.filename = 'proxy.txt'
self.saveFile(self.filename,self.proxylist) def get_urls(self):
'''
:return: 返回代理url列表
'''
urls = []
for i in range(1,3):
url = self.starturl + str(i)
urls.append(url)
return urls def get_proxy_list(self,urls):
'''
爬取代理列表
:param urls:
:return:
'''
browser = webdriver.PhantomJS()
proxy_list = [] for url in urls:
browser.get(url) # 通过get方法打开
browser.implicitly_wait(3)
elements = browser.find_elements_by_xpath('//tbody/tr') #找到每个代理的位置
for element in elements:
item = Item()
item.ip = element.find_element_by_xpath('./td[1]').text
item.port = element.find_element_by_xpath('./td[2]').text
item.anonymous = element.find_element_by_xpath('./td[3]').text
item.local = element.find_element_by_xpath('./td[4]').text
item.speed = element.find_element_by_xpath('./td[5]').text
print(item.ip)
proxy_list.append(item) browser.quit()
return proxy_list def saveFile(self,filename,proxy_list):
'''
将爬取的信息保存到本地
:param filename:
:param proxy_list:
:return:
'''
with open(filename,'w') as f:
for item in proxy_list:
f.write(item.ip + '\t')
f.write(item.port + '\t')
f.write(item.anonymous + '\t')
f.write(item.local + '\t')
f.write(item.speed + '\n\n') if __name__ == '__main__':
Get = GetProxy()
下面我们展示一下爬取的结果
如果用到代理的话,还需要对这些IP进行测试一下。
使用Selenium&PhantomJS的方式爬取代理的更多相关文章
- 使用selenium+phantomJS实现网页爬取
有些网站反爬虫技术设计的非常好,很难采用WebClient等技术进行网页信息爬取,这时可以考虑采用selenium+phantomJS模拟浏览器(其实是真实的浏览器)的方式进行信息爬取.之前一直使用的 ...
- selenium&phantomjs实战--漫话爬取
为什么直接保存当前网页,而不是找到所有漫话链接,再有针对性的保存图片? 因为防盗链的原因,当直接保存漫话链接图片时,只能保存到防盗链的图片. #!/usr/bin/env python # _*_ c ...
- 针对源代码和检查元素不一致的网页爬虫——利用Selenium、PhantomJS、bs4爬取12306的列车途径站信息
整个程序的核心难点在于上次豆瓣爬虫针对的是静态网页,源代码和检查元素内容相同:而在12306的查找搜索过程中,其网页发生变化(出现了查找到的数据),这个过程是动态的,使得我们在审查元素中能一一对应看到 ...
- Selenium+Chrome/phantomJS模拟浏览器爬取淘宝商品信息
#使用selenium+Carome/phantomJS模拟浏览器爬取淘宝商品信息 # 思路: # 第一步:利用selenium驱动浏览器,搜索商品信息,得到商品列表 # 第二步:分析商品页数,驱动浏 ...
- Scrapy 通过登录的方式爬取豆瓣影评数据
Scrapy 通过登录的方式爬取豆瓣影评数据 爬虫 Scrapy 豆瓣 Fly 由于需要爬取影评数据在来做分析,就选择了豆瓣影评来抓取数据,工具使用的是Scrapy工具来实现.scrapy工具使用起来 ...
- python爬虫爬取代理IP
# #author:wuhao # #--*------------*-- #-****#爬取代理IP并保存到Excel----#爬取当日的代理IP并保存到Excel,目标网站xicidaili.co ...
- Python爬虫-代理池-爬取代理入库并测试代理可用性
目的:建立自己的代理池.可以添加新的代理网站爬虫,可以测试代理对某一网址的适用性,可以提供获取代理的 API. 整个流程:爬取代理 ----> 将代理存入数据库并设置分数 ----> 从数 ...
- Python实训day07pm【Selenium操作网页、爬取数据-下载歌曲】
练习1-爬取歌曲列表 任务:通过两个案例,练习使用Selenium操作网页.爬取数据.使用无头模式,爬取网易云的内容. ''' 任务:通过两个案例,练习使用Selenium操作网页.爬取数据. 使用无 ...
- 爬虫实例——爬取淘女郎相册(通过selenium、PhantomJS、BeautifulSoup爬取)
环境 操作系统:CentOS 6.7 32-bit Python版本:2.6.6 第三方插件 selenium PhantomJS BeautifulSoup 代码 # -*- coding: utf ...
随机推荐
- PTA 1005 Spell It Right (20)(20 分)水题
1005 Spell It Right (20)(20 分) Given a non-negative integer N, your task is to compute the sum of al ...
- 0908期 HTML form表单
表单基础摘要 <form id="" name="" method="post/get" action="负责处理的服务端& ...
- 在CentOS 7中使用VS Code编译调试C++项目
1. 安装VSCODE 见VSCode官方链接 https://code.visualstudio.com/docs/setup/linux#_rhel-fedora-and-centos-based ...
- MySql For Windows解压缩版配置
#配置步骤 1.首先下载解压. (此处我解压到了我电脑的“E:\software\MySql”这个位置,下文以这个目录举例); 2.我的电脑右键属性,找到环境变量配置,配置环境变量,将mysql.ex ...
- 基于aop的redis自动缓存实现
目的: 对于查询接口所得到的数据,只需要配置注解,就自动存入redis!此后一定时间内,都从redis中获取数据,从而减轻数据库压力. 示例: package com.itliucheng.biz; ...
- PHP错误日志记录文件位置确定
1.确定web服务器 ( IIS, APACHE, NGINX 等) 以哪一种方式支持PHP,通常是有下面2种方式 通过模块加载的方式, 适用于apache 通过 CGI/fastCGI 模式, 该模 ...
- How To Install MongoDB on CentOS 6
How To Install MongoDB on CentOS 6 Posted on January 21, 2014 by J. Mays | Updated: January 22, 2014 ...
- Dubbo与Zookeeper、SpringMVC整合和使用(负载均衡
转载:http://blog.csdn.net/congcong68/article/details/41113239 互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架 ...
- 基于vue-easytable实现数据的增删改查
基于vue-easytable实现数据的增删改查 原理:利用vue的数据绑定和vue-easetable的ui完成增删改查 后端接口: 1.条件查询表中数据 http://localhost:4795 ...
- Directshow 判断音视频设备是否被占用<转>
直接上代码吧: 代码是参考网上大神分享的,在原基础上做了些修改(只检测视频设备): int DeviceIsBusy(char *videoName) { //输入设备的音视频名称 HRESULT h ...