selenuim自动化爬取汽车在线谷米爱车网车辆GPS数据爬虫
#为了实时获取车辆信息,以及为了后面进行行使轨迹绘图,写了一个基于selelnium的爬虫爬取了车辆gps数据。
#在这里发现selenium可以很好的实现网页解析和处理js处理
#导包
import time
from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
#以下两个包是为了设置显示等待(从网上复制的)
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
class Car_Lines():
def __init__(self):
self.driver = webdriver.Chrome()
#登录网站
def login_web(self):
self.driver.get('http://www.gpsoo.net/index.shtml')
time.sleep(0.5)
while 1:
try:
self.driver.find_element_by_id('loginToggle').click()
self.driver.find_element_by_class_name('first').click()
self.driver.find_element_by_id('txtUserName').send_keys('***')
self.driver.find_element_by_id('txtPwd').send_keys('***')
self.driver.find_element_by_class_name('login_btn').click()
print('已成功登录')
break
except:
print('未登录成功,继续登录')
# 点击 下载轨迹
def download_data(self):
self.driver.find_element_by_xpath("//div[@id='dl-gps-data']/span").click()
self.clear_js()
#清楚原始输入框的信息
self.driver.find_element_by_id('dl-from').clear()
#此处传入下载起始时间
self.driver.find_element_by_id('dl-from').send_keys(self.seven_day())
time.sleep(2)
self.driver.find_element_by_id("dl-data-btn").click()
self.driver.back()
#车辆信息
def info(self,x):
#此处url是一个iframe框里的url地址,可以进入页面时刷新页面会出现
self.driver.get(url)
time.sleep(1)
#给xpath传入变量,解析三种车辆,此处用format传入
info = self.driver.find_elements_by_xpath("//div[@groupid={}]/div[@class='group_canvas']/div".format(x))
time.sleep(0.5)
return info
#消除input框的readonly属性
def clear_js(self):
try:
#首先因为id为dl-from的标签在网页源码中是不存在的,此处是通过js加载出来,所以设置显示等待等待dl-from标签加载出来
#显示等待可以按频率一直等到标签出现,此处合适,有利于时间利用
WebDriverWait(self.driver, 20, 0.5).until(EC.presence_of_element_located((By.ID, "dl-from")))
except Exception as e:
print(e)
#同时这个标签是一个只读标签,因为此处是个日期控件,需要设置js消除标签的只读属性
js = 'document.getElementById("dl-from").removeAttribute("readonly");'
return self.driver.execute_script(js)
#时间间隔为7天
def seven_day(self):
#用datetime包算出七天前的日期时间
t1 = time.time()
t2 = t2 = t1 - 86400 * 7
t2_1 = time.localtime(t2)
t3 = time.strftime("%Y-%m-%d %H:%M:%S", t2_1)
return t3
#获取车辆ID和username并下载轨迹
def get_id_username(self,x):
#默认的id及用户
id = '***'
username = "***"
#遍历所有车辆
for i in range(99):
#这里并不是遍历了99次,因为每一类型车辆数量不足99,也为了节省时间和处理不确定情况,所以while循环是在最后一辆结束后再10次爬取后停止爬取
j = 10
while j > 0:
try:
#遍历获取每一辆车的id和username
id = self.info(x)[i].get_attribute('id')
username = self.info(x)[i].get_attribute('username')
print('id获取成功')
break
except:
print('继续获取id')
j -= 1
if j == 0:
break
#传入url车辆id和username构建url地址获取每辆车信息
self.driver.get('http://mapoo.10010care.com/user/playback.shtml? v=20190401.1357&lang=cn&mds=&requestSource=web&custid=233257382459121121&loginUrl=http://www1.gpsoo1.net/&logout=http://www1.gpsoo1.net/?ip&psip=in1.gpsoo1.net/&custname=' + username + '&random=232423452784459&objectid=' + id)
time.sleep(1)
self.download_data()
print(username + '已下载成功')
time.sleep(1)
#这里有三类所以分三种爬取
#爬取默认组的
def onLine(self, l1):
#l1 = [a, b, c]三个参数是三种情况
for i in l1:
print('开始爬取正在使用的'+i+'车辆')
self.get_id_username(i)
print('爬取完毕')
#退出
def close_web(self):
self.driver.quit()
#主函数
def main(self):
self.login_web()
self.onLine(l1)
self.close_web()
if __name__ == '__main__':
c = Car_Lines()
c.main()
#可以发现已经下载成功间隔为7天的车辆信息
selenuim自动化爬取汽车在线谷米爱车网车辆GPS数据爬虫的更多相关文章
- 爬虫实战——Scrapy爬取伯乐在线所有文章
Scrapy简单介绍及爬取伯乐在线所有文章 一.简说安装相关环境及依赖包 1.安装Python(2或3都行,我这里用的是3) 2.虚拟环境搭建: 依赖包:virtualenv,virtualenvwr ...
- python爬虫scrapy框架——爬取伯乐在线网站文章
一.前言 1. scrapy依赖包: 二.创建工程 1. 创建scrapy工程: scrapy staratproject ArticleSpider 2. 开始(创建)新的爬虫: cd Artic ...
- python3 爬取汽车之家所有车型数据操作步骤(更新版)
题记: 互联网上关于使用python3去爬取汽车之家的汽车数据(主要是汽车基本参数,配置参数,颜色参数,内饰参数)的教程已经非常多了,但大体的方案分两种: 1.解析出汽车之家某个车型的网页,然后正则表 ...
- Scrapy爬取伯乐在线的所有文章
本篇文章将从搭建虚拟环境开始,爬取伯乐在线上的所有文章的数据. 搭建虚拟环境之前需要配置环境变量,该环境变量的变量值为虚拟环境的存放目录 1. 配置环境变量 2.创建虚拟环境 用mkvirtualen ...
- 分布式爬虫系统设计、实现与实战:爬取京东、苏宁易购全网手机商品数据+MySQL、HBase存储
http://blog.51cto.com/xpleaf/2093952 1 概述 在不用爬虫框架的情况,经过多方学习,尝试实现了一个分布式爬虫系统,并且可以将数据保存到不同地方,类似MySQL.HB ...
- (java)selenium webdriver爬虫学习--爬取阿里指数网站的每个分类的top50 相关数据;
主题:java 爬虫--爬取'阿里指数'网站的每个分类的top50 相关数据: 网站网址为:http://index.1688.com/alizs/top.htm?curType=offer& ...
- java爬虫入门--用jsoup爬取汽车之家的新闻
概述 使用jsoup来进行网页数据爬取.jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址.HTML文本内容.它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuer ...
- Python 爬虫实例(15) 爬取 汽车之家(汽车授权经销商)
有人给我吹牛逼,说汽车之家反爬很厉害,我不服气,所以就爬取了一下这个网址. 本片博客的目的是重点的分析定向爬虫的过程,希望读者能学会爬虫的分析流程. 一:爬虫的目标: 打开汽车之家的链接:https: ...
- Python爬虫——使用 lxml 解析器爬取汽车之家二手车信息
本次爬虫的目标是汽车之家的二手车销售信息,范围是全国,不过很可惜,汽车之家只显示100页信息,每页48条,也就是说最多只能够爬取4800条信息. 由于这次爬虫的主要目的是使用lxml解析器,所以在信息 ...
随机推荐
- pands模块的妙用爬取网页中的表格
拿我这篇为例https://www.cnblogs.com/pythonywy/p/11574340.html import pandas as pd df = pd.read_html('https ...
- Python面向对象继承案例
面向对象三大特性 封装 根据 职责 将 属性 和 方法 封装 到一个抽象的 类 中 继承 实现代码的重用,相同的代码不需要重复的编写 多态 不同的对象调用相同的方法,产生不同的执行结果,增加代码的灵活 ...
- Java自学-数字与字符串 操纵字符串
Java常见字符串方法 示例 1 : 获取字符 charAt(int index)获取指定位置的字符 package character; public class TestString { publ ...
- js实现数组去重(方式大汇总)
方法一:循环判断当前元素与其后面所有元素对比是否相等,如果相等删除:(执行速度慢) var arr = [1,23,1,1,1,3,23,5,6,7,9,9,8,5]; function remove ...
- CSS文本单行或者多行超出区域省略号(...)显示方法
单行超出时,主要用到几个CSS属性: 1.text-overflow : clip | ellipsis ; clip : 不显示省略标记(...),而是简单的裁切ellipsis : 当对象内文本溢 ...
- Java 面向对象—非静态代码块
一.非静态代码块 1.声明格式 [修饰符] class 类名 { { 非静态代码块 } } 2.非静态代码块中的代码执行时机 (1)在"每次"创建对象的时候执行 (2)比构造方法早 ...
- 为什么Audition CC2017扫描不了电音插件,你需要这个工具
一时兴起,我也去下载并安装了Audition的音频后期处理软件,版本是cc2017.简单熟悉了对自己声音修理外,我还想添加一点电音的效果显得洋气一些.在网上下载并安装了warves tune后,发现A ...
- python之路第四天
2018年7月17日 python开发IDE: pycharm.eclipse # 专业版 # 不要汉化 安装:去官网下载pycharm 注册:https://blog.csdn. ...
- Golang: 解析JSON数据之一
JSON 作为目前最流行的数据传输格式, 相信每个程序员都跟它打过交道吧.使用 Go 语言时,也不可避免的要操作 JSON 数据,令人惊喜的是,Go 内置了序列化和反序列化 JSON 的功能,今天就来 ...
- Linux系统禁止root账号远程登录
修改配置文件/etc/ssh/sshd_config,去掉PermitRootLogin前的注释,修改值为no,然后重启sshd服务即可 #LoginGraceTime 2m PermitRootLo ...