爬虫抓取网页数据(需求抓取知乎问题下所有回答的爬虫意义在哪?)
优采云 发布时间: 2021-09-21 07:16爬虫抓取网页数据(需求抓取知乎问题下所有回答的爬虫意义在哪?)
我没有看到你很长一段时间,工作有点忙......虽然它每天都在爬虫中写着,它是用很多爬行动物解锁的,但它已经使用了很长时间由于在工作中的NodeJS编写Python。
解决需求问题,Python或nodejs是否只是语法和模块,分析思路和解决方案基本上是一致的。
最近写了一个简单的知乎回答爬虫,我有兴趣告诉它。
需求
在知乎问题下抓住所有答案,包括它的作者,作者粉丝号,回答内容,时间,回答号码,回答回答,并链接到答案。
分析
问题在上图中是一个例子,您想要获得相关数据的答案,通常我们可以按F12分析Chrome浏览器下的请求;但是,在查理捕获工具中,您可以更直观地获取相关领域:
请注意,LER U U UER String参数指示请求每次返回5个答案,并且测试可以更改为20;偏移代表从第一平均值开始;
返回的结果
是JSON格式。每个答案收录更多信息,我们只需要过滤要捕获的字段记录。
需要注意的是,答案返回内容字段,但其格式是Web标记。搜索后,我选择HTMLParser来解析,您将手动处理。
代码
import requests,jsonimport datetimeimport pandas as pdfrom selectolax.parser import HTMLParser
url = 'https://www.zhihu.com/api/v4/questions/486212129/answers'headers = { 'Host':'www.zhihu.com', 'user-agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36', 'referer':'https://www.zhihu.com/question/486212129'}df = pd.DataFrame(columns=('author','fans_count','content','created_time','updated_time','comment_count','voteup_count','url'))
def crawler(start): print(start) global df data= { 'include':'data[*].is_normal,admin_closed_comment,reward_info,is_collapsed,annotation_action,annotation_detail,collapse_reason,is_sticky,collapsed_by,suggest_edit,comment_count,can_comment,content,editable_content,attachment,voteup_count,reshipment_settings,comment_permission,created_time,updated_time,review_info,relevant_info,question,excerpt,is_labeled,paid_info,paid_info_content,relationship.is_authorized,is_author,voting,is_thanked,is_nothelp,is_recognized;data[*].mark_infos[*].url;data[*].author.follower_count,vip_info,badge[*].topics;data[*].settings.table_of_content.enabled', 'offset':start, 'limit':20, 'sort_by':'default', 'platform':'desktop' }
#将携带的参数传给params r = requests.get(url, params=data,headers=headers) res = json.loads(r.text) if res['data']: for answer in res['data']: author = answer['author']['name'] fans = answer['author']['follower_count'] content = HTMLParser(answer['content']).text() #content = answer['content'] created_time = datetime.datetime.fromtimestamp(answer['created_time']) updated_time = datetime.datetime.fromtimestamp(answer['updated_time']) comment = answer['comment_count'] voteup = answer['voteup_count'] link = answer['url']
row = { 'author':[author], 'fans_count':[fans], 'content':[content], 'created_time':[created_time], 'updated_time':[updated_time], 'comment_count':[comment], 'voteup_count':[voteup], 'url':[link] } df = df.append(pd.DataFrame(row),ignore_index=True)
if len(res['data'])==20: crawler(start+20) else: print(res) crawler(0)df.to_csv(f'result_{datetime.datetime.now().strftime("%Y-%m-%d")}.csv',index=False)print("done~")
结果
最终捕获结果大致如下:
你可以看到一些答案是空的。如果你去这个问题,你可以检查它是一个视频答案。如果没有文本内容,则忽略了,当然,您可以删除结果的视频链接。
current(202 1. 0 9)看看此问题界面没有特定的限制,包括直接在没有cookie的代码中的请求,并通过修改限制参数来减少请求的数量
crawli意味着
最近我也想爬网咯咯知乎回的的,首先,我想总结一下分析的所有答案,但实际上抓住了这个想法来阅读它,我发现在表单中读取的阅读经验是很穷。更好地刷知乎;但更明显的价值是,水平对比这几百答案,答案,评论和作者的粉丝很清楚。此外,可以根据结果进行一些词频率分析,单词云映射显示等,这些是稍后的单词。
爬虫只是获取数据的方法,如何解释它是更大的数据价值。
我是泰德,一天写一个爬虫,但我没有写过Python的数据工程师,我将继续更新一系列思克Python爬行动物项目。欢迎继续注意〜