系列文章目录
爬虫学习笔记(一):requests基础用法之爬取各类主流网站1
爬虫学习笔记(二):requests基础用法之爬取各类主流网站2
前言
经过上2篇的内容,我们已经对lxml加xpath的爬取思路已经比较熟悉了。今天我们尝试对json内的内容进行一个爬取。很多时候网站的内容并不是保存在html中的,通过json进行加密,增加了爬取内容的难度。
提示:以下是本篇文章正文内容,下面案例可供参考
一、JSON是什么?
示例: json的全称为:JavaScript Object Notation,是一种轻量级的数据交互格式。而在Python中处理JSON格式的模块有json和pickle两个。
json模块和pickle都提供了四个方法:dumps, dump, loads, load
序列化:将python的数据转换为json格式的字符串(dumps, dum)
反序列化:将json格式的字符串转换成python的数据类型( loads, load)
二、使用步骤
1.引入库
库引入的代码如下(示例):
import json
import requests
2.查找数据
其实这一步对于新手是最难的。我看过不少关于爬取豆瓣的文章,但是由于时效性,或者豆瓣刻意改变了页面布局,你很难利用原来的文章找到对应的数据,一会儿,我会都把坑点出来给大家看。
2.1利用谷歌CHROME浏览器打开豆瓣手机版页面。
!注意:一定要确保是手机版本,手机版本更好爬取。网址如下:https://m.douban.com/movie/
这里出现第一个坑
假设我们要爬取的是“豆瓣热映”,但是新手机版本的豆瓣电影里有“豆瓣热映”,“豆瓣榜单”,“豆瓣片单”等多个专栏,内容被整合了,因此你很难利用CHROME浏览器找到对应的JSON数据。
这里先提供一下“豆瓣热映”的真实URL地址:“https://m.douban.com/movie/nowintheater?loc_id=108288”
大家打开后是这样的:
用Chrome浏览器打开检查页面,我们在NETWORK下面的XHR标签下,找到一个包含文字“item”的JSON文件,从proview进行查看,找到内容和element内的完全一致。
剩下的就简单了,直接上代码:
# -*- coding: utf-8 -*-
import json
import requests
headers={"Referer": "https://m.douban.com/movie/nowintheater?loc_id=108288",
"User-Agent":"Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Mobile Safari/537.36"}
url = "https://m.douban.com/rexxar/api/v2/subject_collection/movie_showing/items?os=android&for_mobile=1&start=0&count=18&loc_id=108288"
# 需要爬数据的网址
response = requests.get(url,headers=headers)
# 先找到对应JSon的url
#html_str = parse_url(url)
# json.laods把json字符串转化为python
#print(json.loads(response.content.decode("utf-8")))
print(type(response.json()))
ret1 = json.loads(response.text)
#print(ret1)
content_list = ret1["subject_collection_items"]
print(content_list)
for i in content_list:
items = {"电影名称": i['title'],"上映时间": i['release_date'],"网址":i['uri']}
content = json.dumps(items, ensure_ascii=False) + "\n,"
with open("doubandianying.txt", "a", encoding="utf-8") as f:
f.write(content)
注意这个代码里面的坑:HEADER里面的Referer": "https://m.douban.com/movie/nowintheater?loc_id=108288"是必须带上的,不然爬取不到内容。
总结
提示:这里对文章进行总结:
以上就是今天要讲的内容,本文仅仅简单介绍了JSON爬虫的使用,对于JSON内容的查找是很困难的,因为网站被爬多了会尽量隐藏信息,也会设置反扒机制。当我们碰见多页面整合时,只能找到真实的单个专栏的页面,更容易爬取。例如:大家可以尝试豆瓣电视剧的美剧或日剧专栏,地址如下:https://m.douban.com/tv/american
在这个网址里面,XHR的含"items"JSON文件很容易被查找到。