#为了实时获取车辆信息,以及为了后面进行行使轨迹绘图,写了一个基于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数据爬虫的更多相关文章

  1. 爬虫实战——Scrapy爬取伯乐在线所有文章

    Scrapy简单介绍及爬取伯乐在线所有文章 一.简说安装相关环境及依赖包 1.安装Python(2或3都行,我这里用的是3) 2.虚拟环境搭建: 依赖包:virtualenv,virtualenvwr ...

  2. python爬虫scrapy框架——爬取伯乐在线网站文章

    一.前言  1. scrapy依赖包: 二.创建工程 1. 创建scrapy工程: scrapy staratproject ArticleSpider 2. 开始(创建)新的爬虫: cd Artic ...

  3. python3 爬取汽车之家所有车型数据操作步骤(更新版)

    题记: 互联网上关于使用python3去爬取汽车之家的汽车数据(主要是汽车基本参数,配置参数,颜色参数,内饰参数)的教程已经非常多了,但大体的方案分两种: 1.解析出汽车之家某个车型的网页,然后正则表 ...

  4. Scrapy爬取伯乐在线的所有文章

    本篇文章将从搭建虚拟环境开始,爬取伯乐在线上的所有文章的数据. 搭建虚拟环境之前需要配置环境变量,该环境变量的变量值为虚拟环境的存放目录 1. 配置环境变量 2.创建虚拟环境 用mkvirtualen ...

  5. 分布式爬虫系统设计、实现与实战:爬取京东、苏宁易购全网手机商品数据+MySQL、HBase存储

    http://blog.51cto.com/xpleaf/2093952 1 概述 在不用爬虫框架的情况,经过多方学习,尝试实现了一个分布式爬虫系统,并且可以将数据保存到不同地方,类似MySQL.HB ...

  6. (java)selenium webdriver爬虫学习--爬取阿里指数网站的每个分类的top50 相关数据;

    主题:java 爬虫--爬取'阿里指数'网站的每个分类的top50 相关数据: 网站网址为:http://index.1688.com/alizs/top.htm?curType=offer& ...

  7. java爬虫入门--用jsoup爬取汽车之家的新闻

    概述 使用jsoup来进行网页数据爬取.jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址.HTML文本内容.它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuer ...

  8. Python 爬虫实例(15) 爬取 汽车之家(汽车授权经销商)

    有人给我吹牛逼,说汽车之家反爬很厉害,我不服气,所以就爬取了一下这个网址. 本片博客的目的是重点的分析定向爬虫的过程,希望读者能学会爬虫的分析流程. 一:爬虫的目标: 打开汽车之家的链接:https: ...

  9. Python爬虫——使用 lxml 解析器爬取汽车之家二手车信息

    本次爬虫的目标是汽车之家的二手车销售信息,范围是全国,不过很可惜,汽车之家只显示100页信息,每页48条,也就是说最多只能够爬取4800条信息. 由于这次爬虫的主要目的是使用lxml解析器,所以在信息 ...

随机推荐

  1. BAPI_TRANSACTION_COMMIT

    通过NCO执行SAP里面的 BAPI_TRANSACTION_COMMIT 并不能直接生效,类似SQL 里面的事物一样,需要有开始与结束,正确的方式如下: RfcSessionManager.Begi ...

  2. .NET CORE webapi epplus 导入导出 (实习第一个月的笔记)

    最近有个需求就是网页表格里面的数据导出到excel  于是从各位前辈的博客园搜了搜demo  大部分非为两类 都是用的插件NPOI和Eppluse ,因此在这里就介绍Eppluse 用法,还有就是在博 ...

  3. Java IO---字节流和字符流

    一.IO流简介 流 流是一个抽象概念,Java程序和外部设备(可以是硬盘上的文件,也可以是网络设备)之间的输入输出操作是基于流的. 流就好比水管中的水流,具有流入和流出,类比数据的输入和输出. Jav ...

  4. 2019 中兴java面试笔试题 (含面试题解析)

      本人5年开发经验.18年年底开始跑路找工作,在互联网寒冬下成功拿到阿里巴巴.今日头条.中兴等公司offer,岗位是Java后端开发,因为发展原因最终选择去了中兴,入职一年时间了,也成为了面试官,之 ...

  5. Ext.urlEncode与Ext.urlDecode

    Ext.urlEncode与Ext.urlDecode: 用于js对象和查询字符串之间的相互转换 Ext.urlEncode例子如下: /* Ext.urlEncode( object, [recur ...

  6. 输入url之后经历什么?

    一.浏览器查找输入域名的IP地址(拿到 IP) 1.查找浏览器缓存(浏览器一般会缓存DNS记录一段时间,一般为2-30分钟). 2.查找系统缓存(即hosts文件,有没有对应的IP) 3.以上都没有的 ...

  7. vue之使用echarts

    在main中 //import ElementUI from 'element-ui' //import 'element-ui/lib/theme-chalk/index.css' import e ...

  8. 设计模式之动态代理(JDK代理)

    动态代理跟静态代理一个很重要的区别在于,动态代理是在内存是中的,是在代码编译期后在内存是实现的,而静态代理是我们自己编写代理类,编译后生成class文件.动态代理需要借助两个类:java.lang.r ...

  9. 针对源代码和检查元素不一致的网页爬虫——利用Selenium、PhantomJS、bs4爬取12306的列车途径站信息

    整个程序的核心难点在于上次豆瓣爬虫针对的是静态网页,源代码和检查元素内容相同:而在12306的查找搜索过程中,其网页发生变化(出现了查找到的数据),这个过程是动态的,使得我们在审查元素中能一一对应看到 ...

  10. sqlserver语句随笔

    替换数据:update 表名 set 列=replace(列,'要替换的数据','替换成的数据'),例子:update kers set KeyConn=replace(KeyConn,'-','/' ...