puppeteer爬取知乎答案列表爬蟲

2021-10-03 13:02:14 字數 2927 閱讀 9578

知乎應該很多人沒事的時候都會去看, 畢竟知乎上平均年收入幾十萬, 日常出國. 哈哈 聽朋友說, 今天閒來無事寫了乙個爬取知乎答案列表的爬蟲. 當然知乎有營養的內容還是很多的

之前寫過一次抓答案列表介面的爬蟲, 感覺不太好, 還得找每個問題的請求介面, 這次使用puppeteer來通過頁面顯示內容抓取

puppeteer是乙個 node 庫,它提供了乙個高階 api 來通過 devtools 協議控制 chromium 或 chrome。puppeteer 預設以 headless 模式執行,但是可以通過修改配置檔案執行「有頭」模式。

下面是完整的**, 注釋我寫的很清楚

**一共需要安裝兩個依賴

第乙個安裝可能會有點慢, 第二個是插入excel的node庫

const puppeteer =

require

("puppeteer");

const fs =

require

("fs");

const nodexls =

require

('node-xls');

vartotal=10

;// 你想抓取的答案數量, 如果想抓取所有, 等於0

(async()

=>);

// 提取所需元素

const title =

await page.

$eval

("h1"

, e => e.innertext)

const content =

await page.

$eval

(".questionrichtext"

, e =>

return e.innertext

})const tag =

await page.

$$eval

(".questionheader-topics .popover"

, e =>);

return a;})

// 標題

console.

log(

"title: "

, title)

;// 標籤

console.

log(

"tag: "

, tag)

;// 內容

console.

log(

"content:"

, content);if

(await page.$(

'.questionmainaction')!=

null

)// 獲取總共回答數量

var totalanswer =

await page.

$eval

(".list-headertext"

, e =>

) totalanswer =

number

(totalanswer.

replace

(",",''

))console.

log(

await page.

$eval

(".list-headertext"

, e =>))

;// 獲取所有回答dom

var dom =

await page.$$(

".list-item");

var count = dom.length

var count2;

// 無限迴圈下滑操作, 當下滑到你想要的答案數量或者請求完所有回答break跳出迴圈

for(

let i =

1; i >

0; i++))

// 如果未登入 出現登入框就關掉

let closeicon =

await page.$(

".zi.zi--close.modal-closeicon")if

(closeicon)

// 每次下滑載入等待一秒

await page.

waitfor

(1000);

var dom =

await page.$$(

".list-item");

count = dom.length;

// 當前回答條數

// 退出條件, 當前頁面的回答條數與上一次下滑請求頁面答案條數相等, 既請求完了所有回答

if(count2 === count)

else

}catch

(error)}

else

}else

}let result =

await page.

evaluate

(getdata)

;writefile

(result, title)

// 寫入json檔案

writeexcel

(result, title)

// 寫入excel檔案

// 所有程序執行完 退出

await browser.

close()

;})(

);function

getdata()

);}catch

(error)}

);return answer;

}// 寫入json檔案

function

writefile

(info, title)})

;}// 寫入execl

function

writeexcel

(info, title)

**就這麼多, 不明白的可以在下面問

puppeteer的文件

python動態爬取知乎 python爬取微博動態

在初學爬蟲的過程中,我們會發現很多 都使用ajax技術動態載入資料,和常規的 不一樣,資料是動態載入的,如果我們使用常規的方法爬取網頁,得到的只是一堆html 沒有任何的資料。比如微博就是如此,我們可以通過下滑來獲取更多的動態。對於這樣的網頁該如何抓取呢?我們以微博使用者動態為例,抓取某名使用者的文...

知乎資料爬取及儲存

import requests from pymysql conn import mysql connect url 分析所有請求後發現上面的url可以直接獲取所需資料的json檔案,兩個引數分 別為offset,limit。其中offset控制起始資料序號,limit控制本次資料數量 經測試off...

爬取知乎所有專欄文章

一般來說爬取乙個 就是那麼幾步走 1.先使用瀏覽器逛一逛想爬取的 找找規律 2.直接發乙個傻瓜式請求,試一下能不能獲取到想要的資料,萬一就得到了呢 3.不行的話,換一下請求頭中的user agent欄位 這邊推薦大家乙個模組 fake useragent 安裝 pip install fake us...