豆瓣电影信息爬取(json)

时间:2023-03-09 16:02:33
豆瓣电影信息爬取(json)

豆瓣电影信息爬取(json)

# a = "hello world" # 字符串数据类型
# b = {"name":"python"} # 字典
# c = '{"name":"python"}' # json数据类型字符串

方法:
分析网页subject 应该是下面类型
a = {'name':[{'id':1,'name':'python'},{'id':2,'name':'python1'},{}......]}
b = json.loads(a)
for i in b['name']:
     print(i['name'])

网页分析
Network:
XHR:(XML  Http  Request)XHR对象提供了对 HTTP 协议的完全的访问,包括做出 POST 和 HEAD 请求以及普通的 GET 请求的能力。
Js:动态脚本语言,广泛应用于web应用的功能开发以及丰富页面体验,可以动态控制页面内容;如修改页面文字、图片、各种效果、功能等;
CSS:层叠样式表,通过设置对应的样式属性可以修改html文档内各元素的显示、位置等样式;如修改颜色、字体、字号、宽高、位置、背景等。


Headers:头信息
URL: https://movie.douban.com/j/search_subjects?type=movie&tag=%E7%83%AD%E9%97%A8&sort=recommend&page_limit=20&page_start=0
Request Method: GET  请求方法,除GET外还有 HEAD、POST、PUT等。
Status Code: 200 OK  HTTP状态码,

例如:
HTTP: Status 200 – 服务器成功返回网页
HTTP: Status 404 – 请求的网页不存在
HTTP: Status 503 – 服务不可用

User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3510.2 Safari/537.36
Preview: 预览
Respouse:响应
找到左侧包含subject的name, 分析subject 正是我们想要的信息。

爬取方法:
1.找到URL
2.解析url,得到我们的网页源代码
3.提取数据
4.保存数据

代码
import json
import requests

def douban():
  # 1.找到URL
  start_url = 'https://movie.douban.com/j/search_subjects?type=movie&tag=%E7%83%AD%E9%97%A8&sort=recommend&page_limit=20&page_start=0'
  # 2.解析URL,得到我们的网页源代码
  # 模拟浏览器,让服务器不会认为我们是电脑来提取的。
  headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3510.2 Safari/537.36}'}

  for i in range(10):
    url = start_url.format(i*20)

    r = requests.get(url,headers = headers) # 用reques这个模块,来获取URL的信息
    # print(r) # 输出 <Respouse [200]>
    ret = r.content.decode() # 当前网页的源代码,json数据类型字符串
    # print(ret)

    # 3.提取数据
    result = json.loads(ret) # 能够版json数据字符串变成字典,result就是真正的字典
    # print(result)
    # print(type(result))

      for i in result['subjects']:
        # print(i['title'])
        # print(i['rate'])
        # print(i['url'])
        name = i['title']
        rate = i['rate']
        url = i['url']

      # 保存数据
        with open('./douban.csv', 'a') as f:
          f.write('{},{},{}\n'.format(name,rate,url))

douban()