p2-豆瓣电影

发布时间 2024-01-05 22:15:21作者: zhang0513

一、学习目标

  1、抓取豆电影中的最新热门电影;其中按照不同类型进行抓取

  2、这里是get请求的方式 

    3、 

二、解决思路

  1、准备好url地址【https://movie.douban.com/】,按F12进行网页分析,从网页中可以得到请求方式为get,并且针对不同类型电影请求式的发起链接如下:

https://movie.douban.com/j/search_subjects?type=movie&tag=最新&page_limit=50&page_start=0
https://movie.douban.com/j/search_subjects?type=movie&tag=豆瓣高分&page_limit=50&page_start=0
https://movie.douban.com/j/search_subjects?type=movie&tag=冷门佳片&page_limit=50&page_start=0
https://movie.douban.com/j/search_subjects?type=movie&tag=华语&page_limit=50&page_start=0
https://movie.douban.com/j/search_subjects?type=movie&tag=欧美&page_limit=50&page_start=0
https://movie.douban.com/j/search_subjects?type=movie&tag=韩国&page_limit=50&page_start=0
https://movie.douban.com/j/search_subjects?type=movie&tag=日本&page_limit=50&page_start=0

针对其中冷门佳片进行网页分析,可以在响应中看到,是可以得到有效的数据的,如下图

三、实例代码

#1、导入模块
import json
import requests
#2、准备url地址,并发起请求
movic_type = input("请选择电影类型:0-热门,1-最新,2-豆瓣最高,3-冷门佳片,4-华语,5-,6-韩国,7-日本\n")
dict = {
    "0":"热门",
    "1":"最新",
    "2": "豆瓣最高",
    "3": "冷门佳片",
    "4": "华语",
    "5": "欧美",
    "6": "韩国",
    "7": "日本"
}
url = f"https://movie.douban.com/j/search_subjects?type=movie&tag={dict[movic_type]}&page_limit=50&page_start=0"
#3、获取数据,并解析
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36 Edg/106.0.1370.42"
}
resp = requests.get(url=url ,headers=headers).json()
for movic_list  in resp["subjects"]:
    rate = movic_list["rate"]
    cover_x = movic_list["cover_x"]
    title = movic_list["title"]
    url = movic_list["url"]
    playable = movic_list["playable"]
    cover = movic_list["cover"]
    id = movic_list["id"]
    cover_y = movic_list["cover_y"]
    is_new = movic_list["is_new"]
    print(title + " 评分:"+ rate +" 链接:"+ url )
    #4、保存数据
    with open("电影.txt",'a',)as f:
        f.write(title + " 评分:"+ rate +" 链接:"+ url)
        f.write("\n")
f.close()

其中获取到json格式的数据后,循环字典来获取每一个元素的值

四、总结

1、在最后保存数据的时候,注意要要用a表示追加写入,否则的话就会覆盖上一次写入的内容