爬什么
把36kr的新闻爬取到本地并保存为json格式。
 
怎么做
- 获取url
- 发送请求,获取响应
- 提取数据
- 保存数据
获取url
观察可知,目标数据所在url。


发送请求,获取响应
最基本的,用requests库发送请求即可。
提取数据
这里需要注意,使用正则提取目标数据之后,这个目标数据格式并不是标准的json格式,我们得调整一下(用re.sub方法去除多余的字符串),把它改成标准格式。

代码
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 
 | import requestsimport re
 import json
 
 class kr:
 def __init__(self):
 self.url = "https://36kr.com/"
 self.headers = {"user-agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36"}
 
 def parse(self,url,headers):
 response = requests.get(url,headers=headers)
 return response.content.decode()
 
 def get_content(self,html_str):
 json_str = re.findall("<script>(.+?)</script>",html_str,re.S)[0]
 json_str =re.sub("window.initialState=","",json_str)
 
 json_str = json.loads(json_str)
 return json_str
 
 def save_content(self,json_str):
 with open("36kr.json","w",encoding="utf8") as f:
 f.write(json.dumps(json_str,ensure_ascii=False,indent=2))
 
 def run(self):
 
 
 html_str = self.parse(self.url,self.headers)
 
 json_str = self.get_content(html_str)
 
 self.save_content(json_str)
 
 if __name__ == '__main__':
 my_kr = kr()
 my_kr.run()
 
 | 
总结
为了输出好看的json格式文件,就要用json.dumps方法。使用这个方法,就得兜圈子,先把json转换为python数据类型,再把python数据类型转换为格式化的json字符串,写入文件并保存。