欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python使用selenium爬蟲知乎的方法示例

 更新時(shí)間:2020年10月28日 09:17:41   作者:宇智波間桐鳴人  
這篇文章主要介紹了python使用selenium爬蟲知乎的方法示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

說起爬蟲一般想到的情況是,使用 python 中都通過 requests 庫(kù)獲取網(wǎng)頁內(nèi)容,然后通過 beautifulSoup 進(jìn)行篩選文檔中的標(biāo)簽和內(nèi)容。但是這樣有個(gè)問題就是,容易被反扒機(jī)制所攔住。

反扒機(jī)制有很多種,例如知乎:剛開始只加載幾個(gè)問題,當(dāng)你往下滾動(dòng)時(shí)才會(huì)繼續(xù)往下面加載,而且在往下滾動(dòng)一段距離時(shí)就會(huì)出來一個(gè)登陸的彈框。

這樣的機(jī)制對(duì)于通過獲取服務(wù)器返回內(nèi)容的爬蟲方式進(jìn)行了限制,我們只能獲得前幾個(gè)回答,而沒辦法或許后面的回答。

所以需要使用 selenium 模擬真實(shí)瀏覽器進(jìn)行操作。

最終實(shí)現(xiàn)效果如下:

在這里插入圖片描述

前提是需要自行搜索教程安裝:

  • chromeDriver
  • selenium 庫(kù)

想要使用下面代碼的可以直接修改 driver.get() 里的地址,然后爬取結(jié)果最終會(huì)存在message.txt文件中

代碼如下:

from selenium import webdriver # 從selenium導(dǎo)入webdriver
from selenium.webdriver.common.by import By # 內(nèi)置定位器策略集
from selenium.webdriver.support.wait import WebDriverWait # 用于實(shí)例化一個(gè)Driver的顯式等待
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.action_chains import ActionChains
import time

option = webdriver.ChromeOptions()
option.add_argument("headless")
driver = webdriver.Chrome() # chrome_options=option 這個(gè)參數(shù)設(shè)置之后可以隱藏瀏覽器
driver.get('https://www.zhihu.com/question/22110581') #修改這里的地址
file = open("./messages.txt", "w")


def waitFun():
  js = """
  let equalNum = 0;
  window.checkBottom = false;
  window.height = 0;
  window.intervalId = setInterval(()=>{
    let currentHeight = document.body.scrollHeight;
    if(currentHeight === window.height){
      equalNum++;
      if(equalNum === 2){
        clearInterval(window.intervalId);
        window.checkBottom = true;
      }
    }else{
      window.height = currentHeight;
      window.scrollTo(0,window.height);
      window.scrollTo(0,window.height-1000);
    }
  },1500)"""
  # 這個(gè)暫停一下是因?yàn)橐却撁鎸⑾旅娴膬?nèi)容加載出,這個(gè) 1500 可以根據(jù)自己的網(wǎng)絡(luò)快慢進(jìn)行適當(dāng)?shù)恼{(diào)節(jié)
  # 這里需要往上移動(dòng)一下,因?yàn)椴煌弦苿?dòng)一下發(fā)現(xiàn)不會(huì)加載。
  driver.execute_script(js)

# selenium 可以獲取 瀏覽器中 js 的變量。調(diào)用的js return
def getHeight(nice):
  # 這里獲取 js 中的 checkBottom 變量,作為到底部時(shí)進(jìn)行停止。
  js = """
  return window.checkBottom;
  """
  return driver.execute_script(js)


try:
  # 先觸發(fā)登陸彈窗。
  WebDriverWait(driver, 40, 1).until(EC.presence_of_all_elements_located(
    (By.CLASS_NAME, 'Modal-backdrop')), waitFun())

  # 點(diǎn)擊空白關(guān)閉登陸窗口
  ActionChains(driver).move_by_offset(200, 100).click().perform()
  # 當(dāng)滾動(dòng)到底部時(shí)
  WebDriverWait(driver, 40, 3).until(getHeight, waitFun())
  # 獲取回答
  answerElementArr = driver.find_elements_by_css_selector('.RichContent-inner')
  for answer in answerElementArr:
    file.write('==================================================================================')
    file.write('\n')
    file.write(answer.text)
    file.write('\n')
  print('爬取成功 '+ str(len(answerElementArr)) +' 條,存入到 message.txt 文件內(nèi)')
finally:
  driver.close()  #close the driver

這套代碼實(shí)現(xiàn)了打開知乎,然后自動(dòng)向下滑動(dòng),當(dāng)彈出登陸框時(shí),自動(dòng)點(diǎn)擊左上角關(guān)閉登陸框。然后繼續(xù)向下滑動(dòng),加載頁面,直到滑動(dòng)到底部。然后將內(nèi)容寫在 message.txt 文件里面。

selenium 功能非常強(qiáng)大, 可以模擬人為在瀏覽器的操作,進(jìn)行輸入、點(diǎn)擊、滑動(dòng)、播放、暫停等等操作,因此也可以用來寫一些腳本,用來刷學(xué)時(shí),搶課等等。

到此這篇關(guān)于python使用selenium爬蟲知乎的方法示例的文章就介紹到這了,更多相關(guān)python selenium爬蟲知乎內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python多線程中獲取函數(shù)返回值的三種方法

    python多線程中獲取函數(shù)返回值的三種方法

    本文主要介紹了python多線程中獲取函數(shù)返回值的三種方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • Python使用asyncio包實(shí)現(xiàn)異步編程方式

    Python使用asyncio包實(shí)現(xiàn)異步編程方式

    這篇文章主要介紹了Python使用asyncio包實(shí)現(xiàn)異步編程方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • Python中__repr__和__str__區(qū)別詳解

    Python中__repr__和__str__區(qū)別詳解

    這篇文章主要介紹了Python中__repr__和__str__區(qū)別詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • python flask開發(fā)的簡(jiǎn)單基金查詢工具

    python flask開發(fā)的簡(jiǎn)單基金查詢工具

    基于python flask開發(fā)的簡(jiǎn)單基金查詢工具,支持大盤指數(shù)實(shí)時(shí)情況查看,總持倉(cāng)實(shí)際漲幅、預(yù)估漲幅等功能,感興趣的朋友可以下載該項(xiàng)目來查看使用
    2021-06-06
  • python實(shí)現(xiàn)決策樹C4.5算法詳解(在ID3基礎(chǔ)上改進(jìn))

    python實(shí)現(xiàn)決策樹C4.5算法詳解(在ID3基礎(chǔ)上改進(jìn))

    下面小編就為大家?guī)硪黄猵ython實(shí)現(xiàn)決策樹C4.5算法詳解(在ID3基礎(chǔ)上改進(jìn))。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-05-05
  • Django Session和Cookie分別實(shí)現(xiàn)記住用戶登錄狀態(tài)操作

    Django Session和Cookie分別實(shí)現(xiàn)記住用戶登錄狀態(tài)操作

    這篇文章主要介紹了Django Session和Cookie分別實(shí)現(xiàn)記住用戶登錄狀態(tài)操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-07-07
  • python先序遍歷二叉樹問題

    python先序遍歷二叉樹問題

    這篇文章主要介紹了python先序遍歷二叉樹問題,簡(jiǎn)單分析了問題,然后向大家分享了代碼示例,具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-11-11
  • python3.5使用tkinter制作記事本

    python3.5使用tkinter制作記事本

    TkInter是標(biāo)準(zhǔn)的Python GUI庫(kù)。的Python與Tkinter的結(jié)合提供了一個(gè)快速和容易的方法來創(chuàng)建GUI應(yīng)用程序。 Tkinter的提供了一個(gè)強(qiáng)大的面向?qū)ο蟮慕涌赥k的GUI工具包.
    2016-06-06
  • python基礎(chǔ)之函數(shù)

    python基礎(chǔ)之函數(shù)

    這篇文章主要介紹了python的函數(shù),實(shí)例分析了Python中返回一個(gè)返回值與多個(gè)返回值的方法,需要的朋友可以參考下
    2021-10-10
  • 用python + openpyxl處理excel2007文檔思路以及心得

    用python + openpyxl處理excel2007文檔思路以及心得

    最近要幫做RA的老姐寫個(gè)合并excel工作表的腳本……源數(shù)據(jù)是4000+個(gè)excel 工作表,分布在9個(gè)xlsm文件里,文件內(nèi)容是中英文混雜的一些數(shù)據(jù),需要從每張表中提取需要的部分,分門別類合并到多個(gè)大的表里。
    2014-07-07

最新評(píng)論