真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

python使用selenium實(shí)現(xiàn)爬蟲(chóng)知乎-創(chuàng)新互聯(lián)

本篇文章為大家展示了python使用selenium實(shí)現(xiàn)爬蟲(chóng)知乎,內(nèi)容簡(jiǎn)明扼要并且容易理解,絕對(duì)能使你眼前一亮,通過(guò)這篇文章的詳細(xì)介紹希望你能有所收獲。

創(chuàng)新互聯(lián)服務(wù)項(xiàng)目包括新華網(wǎng)站建設(shè)、新華網(wǎng)站制作、新華網(wǎng)頁(yè)制作以及新華網(wǎng)絡(luò)營(yíng)銷(xiāo)策劃等。多年來(lái),我們專(zhuān)注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢(shì)、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,新華網(wǎng)站推廣取得了明顯的社會(huì)效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶(hù)以成都為中心已經(jīng)輻射到新華省份的部分城市,未來(lái)相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶(hù)的支持與信任!

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

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

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

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

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

python使用selenium實(shí)現(xiàn)爬蟲(chóng)知乎

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

  • 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)橐却?yè)面將下面的內(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

本文題目:python使用selenium實(shí)現(xiàn)爬蟲(chóng)知乎-創(chuàng)新互聯(lián)
文章分享:http://weahome.cn/article/dcespp.html

其他資訊

在線(xiàn)咨詢(xún)

微信咨詢(xún)

電話(huà)咨詢(xún)

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部