不浪費大家時間,先上目錄,選擇性閱讀
1.爬取介紹 2.代碼展示 3.結果展示 4.福利分享
批量爬取知乎回答
靈魂拷問
你有多久沒讀過一本書了?你知道什麼書最值得讀嗎? 你有多久沒看過一部電影了?你知道什麼電影最值得看嗎?
有人說,我知道可以去看豆瓣評分,按照評分高低排序選書,但是往往評分高的輸卻不容易閱讀,比如說評分高的不一定容易理解,比如下圖介紹的《量子力學》,評分高達9.6,五星好評,可惜工作時間繁忙阻礙了我與它的交流(不是智商)
這時我想到了學歷平均985,年薪平均百萬的知乎平臺,這裏人才遍地推薦的書單準沒錯。在知乎裏搜索相關書單推薦,但是這些知乎推薦動則上千條回答,不知道認準誰的回答好,要麼寥寥無幾的回答不一定具有參考性,所以行哥想如果我將知乎裏的所有回答爬取下來進行統計,選擇大家推薦最多的書籍或電影來昇華自己不就實現精準昇華了嘛
於是行哥花了0.1秒的時間想到了爬蟲,使用10000秒的時間寫了代碼,爬取了知乎下5646個回答,相當於有5646個年薪百萬大佬給我的書單進行投票。獲得數據後進行高頻排序,圖表展示,檢查書單前十名哪些已經讀過,哪些還沒讀,看看我與知乎年薪百萬的差距還差幾本書的距離
no bb show your code
這裏是核心代碼展示,主要就是將知乎的問題號作爲參數傳入函數,然後進行批量爬取回答,使用正則表達式將每個回答裏包含書名號的書籍名或者電影名提取出來,最後在保存的csv即可。
代碼太長,需要完整源碼的可以見文末福利分享
# 公衆號:一行數據
# 所有源碼,python資料,人工智能資料都可以在一行數據裏領取
def getAnswers(qid):
# 獲取所有書籍和回答數據
offset = 0
book_data = {}
while True:
qid = qid
print('Offset =', offset)
# 知乎api請求
url = "https://www.zhihu.com/api/v4/questions/{}/answers?include=content&limit=20&offset={}&platform=desktop&sort_by=default".format(
qid, offset)
res = requests.get(url, headers=headers)
res.encoding = 'utf-8'
data = res.json()
if len(data['data']) == 0:
break
for line in data['data']:
# 保存回答數據
content = line['content']
result = re.findall(r'《(.*?)》', content)
for name in result:
book_data[name] = book_data.get(name, 0) + 1
offset += 20
# 保存爬取的內容
for i in book_data.keys():
new_data = {}
if i:
new_data['書籍名稱'] = i
new_data['頻率'] = book_data[i]
pandas_data.append(new_data)
df2 = pd.DataFrame(pandas_data, columns=['書籍名稱', '頻率'])
df2.to_csv("book.csv",encoding="utf_8_sig")
結果展示
5464個回答一共推薦了6434本書,其中《活着》共被推薦了286次。
行哥不禁感嘆,這些年薪百萬的大佬居然也要考慮跟行哥一樣的問題-活着,看來離年薪百萬更近一步了啦。不知道你距離年薪百萬還差幾本書
如果前十的書都看過了,看看這前11-20的書單,這都看過的可以來文末直接查看領取6343本書的書單。這些書經過行哥確認,完全都可以在微信閱讀上免費閱讀,所以也不用擔心找不到pdf版本。
福利分享
什麼?前二十都看過,那後臺回覆【完整版書單】,看看你與百萬大佬的真實差距 什麼?不想改代碼,需要完整版代碼,點擊【閱讀原文】就有啦 什麼?還想要爬取更多的內容,加我好友【data_ecology】,你只管提,我只管做
有沒有發現,這是你離年薪百萬最近的一次了,行哥只能幫到這了,如果覺得不錯的話,可以點個【贊同】哦,下次行哥將這個程序打包成應用程序,讓你隨心所欲爬取知乎