知っているzhihu:Pythonはある質問の下で与えられたキーワードを含むすべての答えを登った.


原文アドレス及びソースコードダウンロード:xiaoxu's blog
知乎問題を閲覧する過程で、キーワードを通じて自分の希望する答えを素早く特定するために、この爬虫類プログラムを書きました.質問IDとキーワードの組み合わせによって、キーワードを含むすべての回答を保存することができます.
その中で、必ず含まなければならないキーワードをスペースで区切ったり、含まれているキーワードを+で区切ったりします.例えば、IDが23437659であることを知っている質問を探します.「国内で一番好きな都市(故郷以外で生活した都市)はどこですか.なぜですか.」回答に杭州が含まれ、南京や武漢が含まれていることを要求すると、キーワードは「杭州南京+武漢」と入力されます.なお、問題IDは、上記問題リンクがhttps://www.zhihu.com/question/23437659であるように、問題IDがリンクの後ろの数字である問題リンクから得ることができる.
質問番号を入力してください:23437659キーワードを入力してください(同時にスペース間隔を含んで、あるいは役に立つ+間隔を含んでいます):杭州南京+武漢
条件を満たす回答はcsvファイルとtxtファイルに保存され、csvファイルには条件を満たすすべての回答のリンクのみが含まれます.
#!/user/bin/python
#-*-coding:utf-8-*-
#author:luoxiaoxu
#blog:xiaoxu.online
#Filename: ZhihuAnswerDowload.py
#Function:                  

from bs4 import BeautifulSoup
import requests
import os
import re
import time
import csv
import json

def GetAnswer(*Question_ID):
    if len(Question_ID)==0:
        Question_ID=input("       :")
    keyword=input('      (         ,    +  ):')  #   ,      ,         ,  “     +  ”
    keywords=keyword.split()                                            #      ,  enter
    if keyword=='':
        keyword=' '
    headers = {'User-Agent':"Mozilla/5.0 (Windows NT 10.0; Win64; x64)"\
               " AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36"}
    limit=10  #         
    offset=0  #           
    total_num=10  #    ,    limit
    browse_num=0  #         
    record_num=0  #         
    title=''
    if not os.path.exists('    /'):
        os.makedirs('    /')
    print('
……
') while browse_num]+>',re.S) answer_detail=Re.sub('',con['content']) # flag=True if len(keywords)>0: flag=HasKeywords(answer_detail,keyword) # if flag: record_num+=1 author_name=con['author']['name'] author_url='https://www.zhihu.com/people/'+con['author']['url_token'] if not author_name==' ' else ' ' answer_url='https://www.zhihu.com/question/'+str(Question_ID)+'/answer/'+str(con['id']) Save2File_csv(path_csv,[str(record_num)+'.',author_name,answer_url,author_url]) answer_txt=[str(record_num)+'.',author_name+' :'+author_url] answer_txt.append('

:'+answer_url+'
') answer_txt.append('
'+answer_detail+\ '
-------------------------------------------------------------------------------
') Save2File_txt(path_txt,answer_txt) print(' %d
'%record_num) offset+=len(cons) if len(cons)0: print(' , %d !
'%record_num) else: os.remove(path_csv) os.remove(path_txt) print('
') def Save2File_csv(path,content): f=open(path,'a+') writer=csv.writer(f) writer.writerow(content) f.close() def Save2File_txt(path,contents): f=open(path,'a+',encoding='utf-8') for content in contents: f.writelines(content) f.writelines('
') def HasKeywords(answer_detail,keyword): # flag=True for key in keyword.split(): flag2=False for sub_key in key.split('+'): flag2=flag2 or answer_detail.find(sub_key)>0 if flag2: break flag=flag and flag2 if not flag: return False return True def CreativeFile(title,keyword): path_csv=' /'+title+'.csv' path_txt=' /'+title+'.txt' if os.path.exists(path_csv): # , f=open(path_csv,'w') f.seek(0) f.truncate() f.close() if os.path.exists(path_txt): f=open(path_txt,'w') f.seek(0) f.truncate() f.close() Save2File_csv(path_csv,[title]) Save2File_csv(path_csv,[' :'+keyword]) Save2File_csv(path_csv,[' ',' ',' ',' ']) Save2File_txt(path_txt,[title,' :'+keyword+'
']) return path_csv,path_txt if __name__=='__main__': GetAnswer()

質問があれば、個人Blog:小序のタイムマシンに入って交流することを歓迎します!
絵船は雨を聞いて眠る......