追求卓越一諾千金

藍藍設計|集安市政府公众信息网,2011年成立___智彩彩票软件,主創清華團隊-_勇士vs步行者,專注軟件和互聯網ui設計開發_|永州八记的作者。擅長企業信息化管理-|128期看图中肖特、監控--_360彩票全国开奖你、大數據軟件UIUE谘詢和設計開發服務||上海股市大盘。立足UI__掌上娱乐时时彩正规吗?,好好學習-|_一道本,天天進步_|_234彩票网!


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

2019-7-17 釋然 前端及開發文章及欣賞


如果您想訂閱本博客內容_--108娱乐买彩票骗局,每天自動發到您的郵箱中|阿龙山吧, 請點這裏

前言
之前有個同學詢問我是否能夠爬取知乎的全部回答--诺基亚6760,當初隻會Scrapy無法實現下拉的數據全部加載_陆幽张斌。後來在意外中接觸了selenium的自動化測試--_正点对时,看出了selenium的模擬能力的強大天府新区总体规划图,而昨天有個同學問我能否爬取中國工商銀行遠程銀行的精彩回答_-试听卡,我說可以試試|掌上京彩app官方下载。

思路
selenium模擬下拉直至底部
然後通過selenium獲取數據集合
通過pandas寫入excel
selenium模擬下拉直至底部
此處全靠一位大佬的博客點撥||ios11绕过验证强制降级,實在不好意思的是_|_注册购彩账号,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]:  #判斷拖動滾動條後的最大高度與上一次的最大高度的大小_-_108娱乐3d平台,相等表明到了最底部
print("我已下拉完畢")
break
else:
all_window_height.append(check_height) #如果不想等|冯提莫被清晨潜了,將當前頁麵最大高度加入列表-_汶川大地震电影。
print("我正在下拉")

然後通過selenium獲取數據集合
通過find_elements_by_css_selector方法獲取元素對象列表||_斯玛特卡余额查询,然後通過遍曆列表獲取單個對象_-_林科大教务处,通過對象的text屬性獲取數據锈水财阀。
代碼與"通過pandas寫入excel"代碼想結合|高德汇广场。

通過pandas寫入excel
example.xlsx

批量將數據依次寫入excel__金鼎一级大豆油,此處個人知道有兩種寫法_-168彩票手机app苹果,推薦後者_-|盐城一中贴吧。
寫法一:

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腳本_|_爱相约国际交友网,但是如何將二者結合起來-|_248彩票COm,以及各種框架之間的靈活運用-|-亿人娱乐官网下载,都將是我需要麵對的|_-0投资发圈赚钱平台。
--------------------- 
藍藍設計www.jwrumpff.com )是一家專注而深入的界麵設計公司--_鹰爪门,為期望卓越的國內外企業提供卓越的UI界麵設計|_国内西装品牌、BS界麵設計 __山东省联考成绩查询、 cs界麵設計 |-盈盈彩注册、 ipad界麵設計 |-_智行彩票官网、 包裝設計 _--为你写诗诛仙、 圖標定製 ||文明网投票、 用戶體驗 __美眉都给你、交互設計||-至尊娱乐腾讯分分彩、網站建設 _|雅虎宝贝鱼、平麵設計服務--_盈发彩票可信吗。

標簽: selenium處理網頁下拉加載數據爬取並存入excel « 社交互動創新 | 從點讚到擊掌 | 2020 年值得關注的 9 個交互設計趨勢»


訂閱Rss