• <noscript id="ggggg"><dd id="ggggg"></dd></noscript>
    <small id="ggggg"></small> <sup id="ggggg"></sup>
    <noscript id="ggggg"><dd id="ggggg"></dd></noscript>
    <tfoot id="ggggg"></tfoot>
  • <nav id="ggggg"><cite id="ggggg"></cite></nav>
    <nav id="ggggg"></nav>
    成人黃色A片免费看三更小说,精品人妻av区波多野结衣,亚洲第一极品精品无码,欧美综合区自拍亚洲综合,久久99青青精品免费观看,中文字幕在线中字日韩 ,亚洲国产精品18久久久久久,黄色在线免费观看

    selenium處理網(wǎng)頁下拉加載數(shù)據(jù)爬取并存入excel

    2019-7-17    seo達人

    如果您想訂閱本博客內(nèi)容,每天自動發(fā)到您的郵箱中, 請點這里

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

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

    #將滾動條移動到頁面的底部
    all_window_height =  []  # 創(chuàng)建一個列表,用于記錄每一次拖動滾動條后頁面的最大高度
    all_window_height.append(self.driver.execute_script("return document.body.scrollHeight;")) #當(dāng)前頁面的最大高度加入列表
    while True:
    self.driver.execute_script("scroll(0,100000)") # 執(zhí)行拖動滾動條操作
    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) #如果不想等,將當(dāng)前頁面最大高度加入列表。
    print("我正在下拉")

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

    通過pandas寫入excel
    example.xlsx

    批量將數(shù)據(jù)依次寫入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')

    #保存成網(wǎng)頁
    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


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

    日歷

    鏈接

    個人資料

    藍藍設(shè)計的小編 http://www.lzhte.cn

    存檔

    主站蜘蛛池模板: 成人亚洲欧美激情在线电影 | 亚洲一区精品伊人久久| 亚洲精品网站在线观看你懂的| 日韩一页| 日韩人妻少妇一区二区| 日本成人在线网站| 天天综合色一区二区三区| 久久99久久精品视频| 台东市| 国产午夜鲁丝片AV无码免费| 无码熟妇人妻av影片在线| 一区国产传媒国产精品| 国产精品黄页在线播放免费| 男女性高爱潮免费网站| 久久内射| 玖玖在线精品免费视频| 精品人妻潮喷久久久又裸又黄| 国产9 9在线 | 免费| 欧美日韩专区| 精品处破女学生| 国产精品中文字幕av| 日韩欧美中文字幕热| 亚洲AV 无码片一区二区三区| 在线无码免费的毛片视频| 国产精品三级国产专用不卡| 97青草最新免费精品视频| 日韩人妻无码中文字幕一区| 欧美日韩一区二区三区色综合| 日本精品视频一区三区| 女同一区| 狠狠97人人婷婷五月| 亚洲欧美日韩中文字幕网址| 亚洲国产一区二区毛片| 久久精品免视看国产成人| 无码国内精品久久人妻蜜桃| 97夜夜澡人人双人人人喊| 中文字幕高清有码在线| 日韩精品在线二区三区| 2022精品久久久久久中文字幕| 国产精品成人一区二区三区| 午夜福利激情|