知乎應該很多人沒事的時候都會去看, 畢竟知乎上平均年收入幾十萬, 日常出國. 哈哈 聽朋友說, 今天閒來無事寫了乙個爬取知乎答案列表的爬蟲. 當然知乎有營養的內容還是很多的之前寫過一次抓答案列表介面的爬蟲, 感覺不太好, 還得找每個問題的請求介面, 這次使用
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...