python 版本:3.6.1
requests 版本:2.14.2
一、接口分析
- 我们访问 豆瓣电影 豆瓣电影网站
- 打开
调试器( f12 )
-> 查看network
-> 选择xhr
(没有数据刷新即可) -> 点击接口search_subjects
就可以看见页面电影的数据
- 将接口中的url提取出来
https://movie.douban.com/j/search_subjects?type=movie&tag=热门&sort=recommend&page_limit=20&page_start=0
- 提取url的参数( ?后面部分 )进行分析
- type:数据的分类
movie
电影分类 - tag:tag 为电影的分类 这是
热门
分类( 你们可能看见的是ASCLL
码)%E7%83%AD%E9%97%A8
百度转一下就好了 - sort:排序方式,这里是
recommend
按热度排序 - page_limit:请求的条数
- page_start:请求的起始条数
二、代码编写
直接上代码吧,详情看注释
import requests
import json
start = 0 # 开始数
limit = 20 # 每页多少条
url = "https://movie.douban.com/j/search_subjects?type=movie&tag=%E7%83%AD%E9%97%A8&sort=recommend&page_limit=20&page_start={}" # 请求的URL,预留一个展位来做分页
header = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.111 Safari/537.36"} # 模拟浏览器的请求头
# 定义一个分页请求数据的函数
def getPageData(page):
# 起始值 = (page-1) * limit
# 例如 page:1 limit:20 = 0
# page:2 limit:20 = 20
res = requests.get(url.format(page * limit), headers=header) # 发送请求,获取数据
resDictionary = json.loads(res.text) # 将获取到的json数据转换为python字典对象
return resDictionary["subjects"] # 将结果返回
with open('douban.csv', 'w', encoding="utf-8") as f: # 以读的方式打开文件,并设置编码 douban.csv ( 没有则创建 )
f.write("标题,评分\n") # 写入标题和评分 头部
for i in range(1, 11):
data = getPageData(i) # 当前页数据
# 将数据循环遍历 ( 看图一我们获取的是一个数组对象 )
for item in data:
print(f"{item['title']},{item['rate']}") # 将打印的数据输出
f.write(f"{item['title']},{item['rate']}\n") # 这里使用f-string 不会的同学百度一下 或者 使用字符串拼接即可
查看文件
我们这里使用的是
csv
格式 可以选择用excel
工具打开
详情看注释,有什么不懂的欢迎下方进行留言,近期作者会更新一些关于 python 爬虫、基础的文章,感兴趣的朋友可以关注一下作者!