色综合图-色综合图片-色综合图片二区150p-色综合图区-玖玖国产精品视频-玖玖香蕉视频

您的位置:首頁技術(shù)文章
文章詳情頁

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

瀏覽:89日期:2022-07-06 18:50:26

說起爬蟲一般想到的情況是,使用 python 中都通過 requests 庫獲取網(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ī)制對于通過獲取服務(wù)器返回內(nèi)容的爬蟲方式進(jìn)行了限制,我們只能獲得前幾個(gè)回答,而沒辦法或許后面的回答。

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

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

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

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

chromeDriver selenium 庫

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

代碼如下:

from selenium import webdriver # 從selenium導(dǎo)入webdriverfrom 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 ECfrom selenium.webdriver.common.action_chains import ActionChainsimport timeoption = 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 returndef 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)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: python
相關(guān)文章:
主站蜘蛛池模板: 亚洲国产成人久久综合一区77 | 国产精品99在线观看 | 91情侣在线偷精品国产 | 萌白酱粉嫩jk福利在线观看 | 免费播放欧美毛片欧美a | 中文国产成人精品久久一 | 亚洲 欧美 成人日韩 | 无码精品一区二区三区免费视频 | 国产老鸭窝毛片一区二区 | 国产精品成人在线 | 国产成人免费观看 | 国产欧美一区二区精品久久久 | 欧美一级片网 | 久操免费在线视频 | 欧美一区二区日韩一区二区 | 国产一级特黄特色aa毛片 | 经典国产乱子伦精品视频 | 日本人的色道www免费一区 | 仑乱高清在线一级播放 | 免费小视频在线观看 | 久久久久久久亚洲精品一区 | 久热久草 | 99久久综合国产精品免费 | 免费国产成人综合 | 国产一区二区三区免费播放 | 在线91精品亚洲网站精品成人 | 美女扒开腿让男人桶个爽 | 国内精品福利视频 | 狠狠综合久久 | 99久久免费国产精精品 | 欧美精品国产一区二区三区 | 在线观看国产一区二区三区99 | 九九免费视频 | 撸久久| 草草影院在线播放 | 九九99久久精品国产 | 免费人成黄页在线观看视频国产 | 美女又黄又免费 | 色噜噜国产精品视频一区二区 | 亚洲成人在线免费视频 | 日韩精品无码一区二区三区 |