#为了实时获取车辆信息,以及为了后面进行行使轨迹绘图,写了一个基于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天的车辆信息

转载于:https://www.cnblogs.com/wenzb/p/10709288.html

selenuim自动化爬取汽车在线谷米爱车网车辆GPS数据爬虫相关推荐

  1. 七、Python简单爬取学堂在线合作院校页面内容

    这是一个大学生的爬虫作业,我是收钱干活的,比较简单,来过来分享一下. 就是要爬取到合作院校的名称及该所院校在学堂在线开课的数量,将爬取到的数据保存到一个json文件中!例如:"{" ...

  2. scrapy 解析css,Scrapy基础(六)————Scrapy爬取伯乐在线一通过css和xpath解析文章字段...

    上次我们介绍了scrapy的安装和加入debug的main文件,这次重要介绍创建的爬虫的基本爬取有用信息 通过命令(这篇博文)创建了jobbole这个爬虫,并且生成了jobbole.py这个文件,又写 ...

  3. 【selenium爬虫】 selenium自动化爬取京东图书信息

    一.题目要求:搜索京东图书页,自动点击详情页进入,爬取数据信息并且存储到csv中二.解题思路:1.需要下载一个chromedriver.exe.下载地址:ChromeDriver Mirror 注意: ...

  4. pythongui界面实现爬取b站弹幕_Python爬虫自动化爬取b站实时弹幕实例方法

    免费资源网,https://freexyz.cn/ 最近央视新闻记者王冰冰以清除可爱和专业的新闻业务水平深受众多网友喜爱,b站也有很多up主剪辑了关于王冰冰的视频.我们都是知道b站是一个弹幕网站,那你 ...

  5. 自动化爬取淘宝数据--(保存到文本中)

    普通版本的爬取淘宝网页 #淘宝商品信息 #从selenium中引入webdriver from selenium import webdriver import time #输入查询关键词 keywo ...

  6. selenium自动化爬取Boss直聘职位数据 按照热门城市

    from selenium import webdriver import time import re import pandas as pd import os  在爬取的过程中可能会有登陆弹窗, ...

  7. python爬取百度在线语音合成的音频

    python爬取百度在线语音合成 URL:https://ai.baidu.com/tech/speech/tts_online 抓包 api从这里抓包,用的post请求,返回的是base64文件格式 ...

  8. python 全自动化爬取必应图片

    python 全自动化爬取必应图片 from selenium import webdriver import requests import time import re import urllib ...

  9. scrapy爬取网站在线播放TS视频流片段并整合为MP4格式

    目标:爬取网站在线播放的视频 分析: 1.网站:天一影视 视频:天地争霸美猴王第一集 2.request请求 :'https://youku.comyouku.com/20190524/23996_8 ...

最新文章

  1. 如何理解java采用Unicode编码
  2. BZOJ 1176: [Balkan2007]Mokia
  3. 朱棣文: 华人第一学霸家族,家里都是成功得可怕的人
  4. 数据中心UPS维护和使用十大注意事项
  5. 数字图像处理(四)——图像编码技术(二)
  6. MySQL—FTS实现原理介绍PPT
  7. disable_irq/enable_irq使用不匹配
  8. Root Pane Container(三)
  9. CAP--什么是CAP,为何三者不可兼得
  10. C++ primer 第十一章 关联容器
  11. java使用POI5.0生成简易Excel工作簿的一种方法
  12. java生成随机的26位英文字母
  13. Java 源码剖析(13)--MyBatis 使用了哪些设计模式?
  14. 多波段影像 tif转为jpg(png)
  15. Excel中引用方法
  16. 【学术渣解惑】ICLR是个什么样的会议?
  17. 数据库同步软件开发——工作日志
  18. 一、 编写第一个Android应用程序
  19. CD为什么采用44.1kHz采样频率的问题
  20. 移动硬盘接入linux系统吗,从移动硬盘安装Linux

热门文章

  1. 安卓APP_ Fragment(2)—— Activity与Fragment的通信
  2. windows下的diskpart指令彻底格式化清除U盘
  3. 向日葵在mac不能以服务器运行吗,mac远程桌面连接在哪?向日葵可以实现mac远程连接吗?...
  4. java 重定向 https_使用简单身份验证从HTTP重定向到HTTPS
  5. vue动态切换css文件_如何在vue组件中动态的引入css文件?
  6. 前端:Element UI 多选框组用法笔记
  7. 通过视觉直观感受7种常用的排序算法
  8. Memcached的基础梳理
  9. linux网络编程、socket编程
  10. 架构师之路 扩充字段_扩大您作为设计师的业务影响力的四个基础