利用爬虫爬取网页数据主要有两种方式:
第一种是直接爬取HTML网页内容,它的好处是可以自定义爬取的内容,弊端是很多时候这种行为是被网站禁止的,并且需要根据网站的结构来编写代码。
第二种是利用网站的API进行爬取,这是网站向用户开放的接口,好处是有网站的允许,不用怕IP被封等情况,属于正规的数据获取途径,且操作不难;同样的,弊端是只能获取限定内容。
运行环境:Jupyter Notebook(默认已安装了anaconda包)
运行过程:
1、打开Jupyter Notebook
在放Python代码的位置打开命令窗口,运行以下代码,在浏览器中会自动打开Jupyter Notebook
jupyter notebook
在jupyter notebook中点击右上角的new,新建Python3文件,开始编写代码
2、爬取豆瓣“即将上映”部分的电影
在豆瓣API官方文档中找到即将上映部分
可以看到目标URL是豆瓣网址https://api.douban.com/ + resources URL
import urllib.request as request #导入urllib包,利用request模块抓取URL内容
url = 'https://api.douban.com/v2/movie/coming_soon'
crawl_content = request.urlopen(url).read() #发送get请求到网页,并返回读取到的内容
print(crawl_content)
输出结果如下:可以看到已经抓取到了一些内容,但由于编码和格式的问题可读性很低
因此,对代码进行改进,让内容显示成json格式,并修改编码
import urllib.request as request
import json
url = 'https://api.douban.com/v2/movie/coming_soon'
crawl_content = request.urlopen(url).read()
print(json.loads(crawl_content.decode('utf8')))
输出结果如下:修改后可以大概看出它的主要内容,但是由于信息较多,所以需要对代码进一步修改,从以下内容中提取出我们需要的信息
在这里就只提取三类信息:标题(title)、类型(genres)、年份(year)
import urllib.request as request
import json
url = 'https://api.douban.com/v2/movie/coming_soon'
crawl_content = request.urlopen(url).read()
movies = json.loads(crawl_content.decode('utf8'))['subjects']
for movie in movies:
print(movie['title'],movie['genres'],movie['year'])
输出的jupyter界面如图所示:
PS:可以看到,这里只有20条数据,仔细看豆瓣的文档,发现它是有数量限制的。
参考资料:
豆瓣API官方文档
Python爬虫之一:基于API的爬虫
【大数据】使用API进行爬虫