本篇文章為大家展示了python使用selenium實現爬蟲知乎,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。
說起爬蟲一般想到的情況是,使用 python 中都通過 requests 庫獲取網頁內容,然后通過 beautifulSoup 進行篩選文檔中的標簽和內容。但是這樣有個問題就是,容易被反扒機制所攔住。
反扒機制有很多種,例如知乎:剛開始只加載幾個問題,當你往下滾動時才會繼續(xù)往下面加載,而且在往下滾動一段距離時就會出來一個登陸的彈框。
這樣的機制對于通過獲取服務器返回內容的爬蟲方式進行了限制,我們只能獲得前幾個回答,而沒辦法或許后面的回答。
所以需要使用 selenium 模擬真實瀏覽器進行操作。
最終實現效果如下:
前提是需要自行搜索教程安裝:
想要使用下面代碼的可以直接修改 driver.get()
里的地址,然后爬取結果最終會存在message.txt
文件中
代碼如下:
from selenium import webdriver # 從selenium導入webdriver from selenium.webdriver.common.by import By # 內置定位器策略集 from selenium.webdriver.support.wait import WebDriverWait # 用于實例化一個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 這個參數設置之后可以隱藏瀏覽器 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)""" # 這個暫停一下是因為要等待頁面將下面的內容加載出,這個 1500 可以根據自己的網絡快慢進行適當的調節(jié) # 這里需要往上移動一下,因為不往上移動一下發(fā)現不會加載。 driver.execute_script(js) # selenium 可以獲取 瀏覽器中 js 的變量。調用的js return def getHeight(nice): # 這里獲取 js 中的 checkBottom 變量,作為到底部時進行停止。 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()) # 點擊空白關閉登陸窗口 ActionChains(driver).move_by_offset(200, 100).click().perform() # 當滾動到底部時 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 文件內') finally: driver.close() #close the driver
文章題目:python使用selenium實現爬蟲知乎-創(chuàng)新互聯
本文地址:http://www.chinadenli.net/article38/dcespp.html
成都網站建設公司_創(chuàng)新互聯,為您提供網站收錄、企業(yè)網站制作、微信小程序、網站改版、定制網站、網站設計
聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯