selenuim自動化爬取汽車在線穀米愛車網車輛GPS數據爬蟲

#爲了實時獲取車輛信息,以及爲了後面進行行使軌跡繪圖,寫了一個基於selelnium的爬蟲爬取了車輛gps數據。html

#在這裏發現selenium能夠很好的實現網頁解析和處理js處理web

 

 

 

#導包canvas

import time
from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWaitdom

#如下兩個包是爲了設置顯示等待(從網上覆制的)
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('未登陸成功,繼續登陸')ui


# 點擊 下載軌跡
  def download_data(self):
    self.driver.find_element_by_xpath("//div[@id='dl-gps-data']/span").click()
    self.clear_js()url

    #清楚原始輸入框的信息
    self.driver.find_element_by_id('dl-from').clear()spa

    #此處傳入下載起始時間
    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().net


#車輛信息
  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天的車輛信息

相關文章
相關標籤/搜索