国产精品爱久久久久久久小说,女人扒开腿让男人桶到爽 ,亚洲欧美国产双大乳头,国产成人精品综合久久久久,国产精品制服丝袜无码,免费无码精品黄av电影,黑色丝袜无码中中文字幕,乱熟女高潮一区二区在线

            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腳本,但是如何將二者結合起來,以及各種框架之間的靈活運用,都將是我需要面對的。
            --------------------- 
            藍藍設計www.dzxscac.cn )是一家專注而深入的界面設計公司,為期望卓越的國內外企業提供卓越的UI界面設計、BS界面設計 、 cs界面設計 、 ipad界面設計 、 包裝設計 、 圖標定制 、 用戶體驗 、交互設計、網站建設 平面設計服務

            日歷

            鏈接

            個人資料

            藍藍設計的小編 http://www.dzxscac.cn

            存檔

            主站蜘蛛池模板: 国产乱人伦av在线a麻豆| 91视频在线看| 寂寞人妻瑜伽被教练日| 无码人妻精品一区二区蜜桃色欲| 免费成人毛片| 激情婷婷六月天| 亚洲国产精华液网站w| 中文字幕一本性无码| 日本www在线| 欧美噜噜久久久xxx| 久久久久久亚洲综合影院| 69人妻一区二区三区| av资源共享| 天堂网在线最新版www中文网| 国色天香社区在线视频观看| 免费在线观看你懂的| 黄色肉肉视频| 中文字幕日韩精品欧美一区| 狠狠cao2020高清视频| 天天操夜操| 亚洲精品岛国片在线观看| 亚洲国内自拍愉拍| 久久亚洲天堂| 91精品久久久久久久99蜜桃| 97人妻天天爽夜夜爽二区| 国产亚洲视频免费播放| 国产午夜一区二区三区| 国产超碰无码最新上传| 搡老熟女老女人一区二区| 成年男女免费视频网站无毒| 亚洲 小说 欧美 激情 另类| 精品无码国产日韩制服丝袜| 四虎精品寂寞少妇在线观看| cekc老妇女cea0| 97在线视频人妻无码| 未满十八18禁止免费无码网站| 国农村精品国产自线拍| 日韩1024| 俄罗斯av片| 熟妇人妻激情偷爽文| 露脸国产精品自产拍在线观看|