番外篇-python
最近因为一些特殊原因,了解了一下python,并且做了一个简易爬虫,目标是知乎。
注*:博主并没有深入学习python,只是了解了一下基本用法,如变量类型、循环、判断,然后使用了一下python的工具,博主对这些工具也不太了解,博主的代码仅限于实现功能,如有关于python的问题,请不要问博主。博主的python版本是2.7。
代码:
#!/usr/bin/env python # -*- coding:utf-8 -*- import codecs import requests import csv import sys import json import time, datetime
#更改str基础编码为utf-8 reload(sys) sys.setdefaultencoding('utf-8') def getdata(cookie,page,search,search_hash_id): url = 'https://www.zhihu.com/api/v4/search_v3?t=general&q=' + str( search) + '&correction=1&offset=' + str( page) + '&limit=20&lc_idx=23&show_all_topics=0&search_hash_id=' + str( search_hash_id) + '&vertical_info=0%2C1%2C0%2C0%2C0%2C0%2C0%2C0%2C0%2C1' #原链接 # url = 'https://www.zhihu.com/api/v4/search_v3?t=general&q=996&correction=1&offset=60&limit=20&lc_idx=63&show_all_topics=0&search_hash_id=12310cc00bec8e490920f7b13a16fb58&vertical_info=0%2C1%2C0%2C0%2C0%2C0%2C0%2C0%2C0%2C1' headers = { "user-agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36", "cookie": cookie, "Host": "www.zhihu.com", "Referer": "https://www.zhihu.com/", } res = requests.get(url, headers=headers) #json转字典 result = json.loads(res.text) #主要数据 data = result['data'] return data def savedata(cookie,page,search,filename,search_hash_id): index = 1 data = [] #循环拼接分页数据 while index <= page: data += getdata(cookie, index*20, search,search_hash_id) index = index + 1 with open(filename, 'wb') as f: f.write(codecs.BOM_UTF8) writer = csv.writer(f) #表头 fields = ('标题', '描述', '点赞', '评论', '创建时间') encoding = 'utf-8-sig' writer.writerow(fields) for key in data: #忽略错误 try: title = str(key['highlight']['title']) description = str(key['highlight']['description']) voteup = str(key['object']['voteup_count']) comment = str(key['object']['comment_count']) time_str = float(key['object']['created_time']) #时间戳转时间 timeArray = time.localtime(time_str) create_time = time.strftime("%Y-%m-%d %H:%M:%S", timeArray) # print('标题:'+title) # print('描述:'+description) # print('点赞:'+voteup) # print('评论:'+comment) # print('创建时间:'+create_time) row = [] row.append(title) row.append(description) row.append(voteup) row.append(comment) row.append(create_time+'\t') writer.writerow(row) except: print("发生异常") if __name__ == '__main__': #cookie 重要参数 cookie与search_hash_id会发生改变,即时到知乎网页请求获取最新参数 cookie = '写入你的cookie' page = 10 #获取多少页数据 知乎默认一页20条数据 search = '996' #搜索内容 filename = '996.csv' #保存的文件名 保存到本文件同目录下 search_hash_id = 'bcdfc2c7b22a17917dd6d6aa6752b3a4' #知乎搜索id 重要参数 savedata(cookie,page,search,filename,search_hash_id)
工具:
PyCharm、Anaconda2
具体安装方法:https://www.cnblogs.com/yuxuefeng/articles/9235431.html 这篇博客讲的很清楚,其中要注意python要用到很多工具,自己安装很费事,而Anaconda带有很多工具,不需要自己再安装,但是一定要将解释器选择为Anaconda中的python,不然是无法利用到Anaconda的。
效果:
注意:
本博客的代码只能爬到这种数据:
不能爬到这种数据:
因为数据格式不同,也不能说不能爬到,采集是可以采集到的,但是导出的时候都被当做异常数据处理到了。这已经满足博主想要的效果了,如有需要可以自行修改。
最后,如果你只是想要数据,并不想写代码,推荐:http://houyi.shenjian.io/?bd&utm=search 这个工具,博主简单用了一下,功能还行,而且是免费的。