av一区二区在线观看_亚洲男人的天堂网站_日韩亚洲视频_在线成人免费_欧美日韩精品免费观看视频_久草视

您的位置:首頁技術文章
文章詳情頁

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

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

說起爬蟲一般想到的情況是,使用 python 中都通過 requests 庫獲取網頁內容,然后通過 beautifulSoup 進行篩選文檔中的標簽和內容。但是這樣有個問題就是,容易被反扒機制所攔住。

反扒機制有很多種,例如知乎:剛開始只加載幾個問題,當你往下滾動時才會繼續往下面加載,而且在往下滾動一段距離時就會出來一個登陸的彈框。

這樣的機制對于通過獲取服務器返回內容的爬蟲方式進行了限制,我們只能獲得前幾個回答,而沒辦法或許后面的回答。

所以需要使用 selenium 模擬真實瀏覽器進行操作。

最終實現效果如下:

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

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

chromeDriver selenium 庫

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

代碼如下:

from selenium import webdriver # 從selenium導入webdriverfrom selenium.webdriver.common.by import By # 內置定位器策略集from selenium.webdriver.support.wait import WebDriverWait # 用于實例化一個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 這個參數設置之后可以隱藏瀏覽器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 可以根據自己的網絡快慢進行適當的調節 # 這里需要往上移動一下,因為不往上移動一下發現不會加載。 driver.execute_script(js)# selenium 可以獲取 瀏覽器中 js 的變量。調用的js returndef getHeight(nice): # 這里獲取 js 中的 checkBottom 變量,作為到底部時進行停止。 js = ''' return window.checkBottom; ''' return driver.execute_script(js)try: # 先觸發登陸彈窗。 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

這套代碼實現了打開知乎,然后自動向下滑動,當彈出登陸框時,自動點擊左上角關閉登陸框。然后繼續向下滑動,加載頁面,直到滑動到底部。然后將內容寫在 message.txt 文件里面。

selenium 功能非常強大, 可以模擬人為在瀏覽器的操作,進行輸入、點擊、滑動、播放、暫停等等操作,因此也可以用來寫一些腳本,用來刷學時,搶課等等。

到此這篇關于python使用selenium爬蟲知乎的方法示例的文章就介紹到這了,更多相關python selenium爬蟲知乎內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: python
相關文章:
主站蜘蛛池模板: 欧美一级特黄视频 | 九九九国产 | 国产在线中文字幕 | 免费一区二区 | 女同一区二区三区 | 午夜你懂的 | 午夜在线国语中文字幕视频 | 日韩av成人在线 | 欧美午夜理伦三级在线观看 | 国产一区在线视频 | 青青青草视频 | 久草视频免费在线 | 亚洲精品www久久久久久广东 | 免费av不卡 | 亚洲第一第二区 | 亚洲免费一区二区 | 亚洲福利网 | 日本国产在线 | 精品国产乱码久久久久久蜜柚 | 国产成人毛片 | 五月天一区二区三区 | 久久久久综合 | 久久久精品影院 | 久久老司机| 午夜视频在线 | 欧美一区二区三区的 | 另类ts人妖一区二区三区 | 日韩精品久久久 | 久久久久综合 | 久久久久久毛片 | 亚洲黄色在线视频 | 中文字幕在线视频播放 | 少妇bbw搡bbbb搡bbbb | 另类ts人妖一区二区三区 | 天堂av资源| 日日摸天天添天天添破 | 亚洲精品免费观看 | 成人精品视频 | 成人在线精品 | 色婷婷影院 | 国产精品麻豆免费版 |