午夜勾魂曲-午夜福利自怕-午夜福利在线观看6080-午夜福利院电影-国产精品毛片AV久久97-国产精品麻豆高潮刺激A片

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è)計m.gerard.com.cn )是一家專注而深入的界面設(shè)計公司,為期望卓越的國內(nèi)外企業(yè)提供卓越的UI界面設(shè)計、BS界面設(shè)計 、 cs界面設(shè)計 、 ipad界面設(shè)計 、 包裝設(shè)計 、 圖標定制 、 用戶體驗 、交互設(shè)計、網(wǎng)站建設(shè) 平面設(shè)計服務(wù)

日歷

鏈接

個人資料

藍藍設(shè)計的小編 http://m.gerard.com.cn

存檔

主站蜘蛛池模板: 久久最新地址获取 | 亚洲精品在线播放视频 | 成人国产精品玖玖热色欲 | 国内精品久久久久影院老司 | 亚洲精品中文字幕无码A片蜜桃 | 首页 国产 亚洲 中文字幕 | 国产亚洲日韩另类在线播放 | 青青久在线视频免费观看 | 一区两区三不卡 | 男女作爱在线播放免费网页版观看 | bl高h肉文| 久久亚洲国产中文字幕 | 好大好硬好爽好深好硬视频 | 多男同时插一个女人8p | 试看做受120秒免费午夜剧场 | 国产精品第十页 | 国产原创剧情麻豆在线 | 久久青草影院 | 一个人看www | 污污内射久久一区二区欧美日韩 | 被窝伦理电影午夜 | 多男同时插一个女人8p | 国语自产视频在线不卡 | 国产精品伦理一二三区伦理 | 羞羞答答的免费视频在线观看 | 日本阿v直播在线 | 超碰免费视频公开97 | 木凡的天空在线收听 | sao虎影院桃红视频在线观看 | 国产精品爽爽久久久久久蜜桃 | 亚洲免费网站观看视频 | 菠萝菠萝蜜高清观看在线 | 白百合在线观看 | 国产精品99久久免费黑人人妻 | 私人玩物黑丝 | 日韩精品熟女一区二区三区中文 | 在线免费视频a | 99国内精精品久久久久久婷婷 | 欧美video巨大粗暴18 | 日本无码免费久久久精品 | 欧美日韩看看2015永久免费 |