国产69囗曝吞精在线视频,肥臀浪妇太爽了快点再快点,亚洲欧洲成人a∨在线观看,狠狠色丁香久久综合 ,国精一二二产品无人区免费应用,亚洲精品久久久久中文字幕,四虎一区二区成人免费影院网址 ,无码三级中文字幕在线观看

      selenium處理網頁下拉加載數據爬取并存入excel

      2019-7-17    seo達人

      如果您想訂閱本博客內容,每天自動發到您的郵箱中, 請點這里

      前言
      之前有個同學詢問我是否能夠爬取知乎的全部回答,當初只會Scrapy無法實現下拉的數據全部加載。后來在意外中接觸了selenium的自動化測試,看出了selenium的模擬能力的強大,而昨天有個同學問我能否爬取中國工商銀行遠程銀行的精彩回答,我說可以試試。

      思路
      selenium模擬下拉直至底部
      然后通過selenium獲取數據集合
      通過pandas寫入excel
      selenium模擬下拉直至底部
      此處全靠一位大佬的博客點撥,實在不好意思的是,selenium就看了下常用的api,實在不懂如何判斷是否加載完畢,而該博客代碼的原理也好理解,通過不斷下拉判斷與上一次高度進行對比,知道前端頁面的滾動高度屬性就懂了,當然思想最重要。
      見代碼:

      #將滾動條移動到頁面的底部
      all_window_height =  []  # 創建一個列表,用于記錄每一次拖動滾動條后頁面的最大高度
      all_window_height.append(self.driver.execute_script("return document.body.scrollHeight;")) #當前頁面的最大高度加入列表
      while True:
      self.driver.execute_script("scroll(0,100000)") # 執行拖動滾動條操作
      time.sleep(3)
      check_height = self.driver.execute_script("return document.body.scrollHeight;")
      if check_height == all_window_height[-1]:  #判斷拖動滾動條后的最大高度與上一次的最大高度的大小,相等表明到了最底部
      print("我已下拉完畢")
      break
      else:
      all_window_height.append(check_height) #如果不想等,將當前頁面最大高度加入列表。
      print("我正在下拉")

      然后通過selenium獲取數據集合
      通過find_elements_by_css_selector方法獲取元素對象列表,然后通過遍歷列表獲取單個對象,通過對象的text屬性獲取數據。
      代碼與"通過pandas寫入excel"代碼想結合。

      通過pandas寫入excel
      example.xlsx

      批量將數據依次寫入excel,此處個人知道有兩種寫法,推薦后者。
      寫法一:

      problem = cls.driver.find_elements_by_css_selector("li h2.item-title a")
      data = pd.read_excel('example.xlsx', sheet_name = 'Sheet1')
      problemtext = []
      for i in problem:
      problemtext .append(i.text)
      replytext = []
      reply = cls.driver.find_elements_by_css_selector("div.item-right p")
      for j in reply:
          replytext.append(j.text)
          data.loc[row,'答案'] = j.text
      data['問題'] = problemtext
      data['答案'] = replytext

      DataFrame(data).to_excel('test.xlsx', sheet_name='Sheet1')

      寫法二:

      problem = cls.driver.find_elements_by_css_selector("li h2.item-title a")
      data = pd.read_excel('example.xlsx', sheet_name = 'Sheet1')
      row = 1
      for i in problem:
          data.loc[row,'問題'] = i.text
          row += 1
      row = 1
      reply = cls.driver.find_elements_by_css_selector("div.item-right p")
      for j in reply:
          data.loc[row,'答案'] = j.text
          row += 1

      DataFrame(data).to_excel('test.xlsx', sheet_name='Sheet1')

      完整代碼
      import pandas as pd
      from pandas import DataFrame
      import unittest
      import time
      from selenium import webdriver
      from selenium.webdriver.support.ui import Select
      from selenium.webdriver.support.select import Select
      from selenium.webdriver.support.ui import WebDriverWait

      class autoLogin(unittest.TestCase):

      URL = 'http://zhidao.baidu.com/business/profile?id=87701'


      @classmethod
      def setUpClass(cls):
      cls.driver = webdriver.Firefox()
      cls.driver.implicitly_wait(20)
      cls.driver.maximize_window()



      def test_search_by_selenium(self):
      self.driver.get(self.URL)
      self.driver.title
      time.sleep(1)
      #將滾動條移動到頁面的底部
      all_window_height =  []
      all_window_height.append(self.driver.execute_script("return document.body.scrollHeight;"))
      while True:
      self.driver.execute_script("scroll(0,100000)") 
      time.sleep(3)
      check_height = self.driver.execute_script("return document.body.scrollHeight;")
      if check_height == all_window_height[-1]:  
      print("我已下拉完畢")
      break
      else:
      all_window_height.append(check_height) 
      print("我正在下拉")

      @classmethod
      def tearDownClass(cls):
      html=cls.driver.page_source
      problem = cls.driver.find_elements_by_css_selector("li h2.item-title a")
      data = pd.read_excel('example.xlsx', sheet_name = 'Sheet1')
      row = 1
      for i in problem:
          data.loc[row,'問題'] = i.text
          row += 1
      row = 1
      reply = cls.driver.find_elements_by_css_selector("div.item-right p")
      for j in reply:
          data.loc[row,'答案'] = j.text
          row += 1
          
      DataFrame(data).to_excel('test.xlsx', sheet_name='Sheet1')

      #保存成網頁
      with open("index.html", "wb") as f:
      f.write(html.encode())
      f.close()
      cls.driver.quit()

      if __name__ == '__main__':
      unittest.main(verbosity=2)

      text.xlsx


      總結
      在使用Scrapy爬蟲時,可以通過selenium來執行網頁中的一些js腳本,但是如何將二者結合起來,以及各種框架之間的靈活運用,都將是我需要面對的。
      --------------------- 
      藍藍設計m.izc.net.cn )是一家專注而深入的界面設計公司,為期望卓越的國內外企業提供卓越的UI界面設計、BS界面設計 、 cs界面設計 、 ipad界面設計 、 包裝設計 、 圖標定制 、 用戶體驗 、交互設計、網站建設 平面設計服務

      日歷

      鏈接

      個人資料

      藍藍設計的小編 http://m.izc.net.cn

      存檔

      主站蜘蛛池模板: 人妻精品久久无码区洗澡| 狠狠躁夜夜躁av无码中文幕| 亚洲精品日韩久久精品| 亚洲精品一区二区三区中文字幕| 中文字幕v亚洲ⅴv天堂| 亚洲一区观看| 我把护士日出水了视频90分钟| 欧美成人va免费大片视频| 欧美xxxx性| 国产精品视频一区二区三区不卡| 好紧好爽好湿别拔出来视频男男 | 人人入人人爱| 国产精品1| 精品无码一区二区三区在线| 337p日本大胆欧洲亚洲色噜噜| 亚洲视频在线免费| 国产亚洲精品一区二区无| 伊人久久大香线蕉综合色狠狠| 成人免费视频国产免费网站| 日韩精品无码一区二区视频| 色屋视频| 丁香婷婷激情五月| 久久婷婷五月综合色和啪| 欧美丰满熟妇aaaaa片| 青草视频免费在线观看| 免费的黄色的视频| 精品av国产一区二区三区| 国产高清-国产av| 窝窝午夜影院| 国产萌白酱喷水视频在线观看 | 国产成人精品电影在线观看| 亚洲国内成人精品网| 亚洲玖玖爱| 久久精品人妻无码一区二区三区| 久久综合伊人| 日本免费啪视频在线看视频| 大香焦久久| 久久午夜无码鲁丝片直播午夜精品 | 一级片视频网站| 色综合久久久久无码专区| 久久亚洲精品成人av二次元|