python3.6爬虫之豆瓣电影Top200详解(三)

python3.6爬虫之豆瓣电影Top200详解(三)

目标:抓取豆瓣电影的导演、评分、电影名、url,并保存于本地excel。


我们采用:requests(获取)——json——pandas(储存)


废话不多说,先上结果与代码:


# -*- coding: utf-8 -*-
import requests
import json
import pandas as pd

#1:把所有url放入urls这个列表里。2:用for循环实现翻页
urls = ['https://movie.douban.com/j/new_search_subjects?sort=S&range=0,' \
        '10&tags=%E7%94%B5%E5%BD%B1&start={}'.format(i*20) for i in range(0,10)]
comments = []   #创建一容器来放爬去的内容
for url in urls:
    r = requests.get(url).json()   #获取json文件
    jsons = r['data']              #获取data键中的数据
    for it in jsons:
        author = it['directors']   #获取导演
        # if['directors']中值为空,则author = it['casts']
        if author ==None:          
            print('none')
        else:
            author = it['casts']
            
        rate = it['rate']
        title = it['title']
        url = it['url']
        comments.append({'authors':author,'rates':rate,'titles':title,'urls':url})

df = pd.DataFrame.from_dict(comments)   #定义DataFrame对象并赋给df
df.to_excel('D://db_dy.xlsx')          #把结果输出为excel,存在D盘


前言:

①:了解网页的两种加载方法


②:判断是何种加载方法

  • JavaScript由“允许”改为“阻止”,重新刷新页面,若网页正常加载,说明该网页的加载方式是同步加载,若网页没有正常加载,说明该网页的加载方式是异步加载,如图:


③:网上很多例子大都是抓取top250,因为那网址属于同步加载,很容易抓取(参考第二篇)。

我们这篇top200,属于异步加载,如图:



现重点讲解代码中间部分

一:真实的urls




所以我们得出真实url:https://movie.douban.com/j/new_search_subjects?sort=S&range=0,10&tags=%E7%94%B5%E5%BD%B1&start=0

  • 通过加载更多,我们发现url中start随之同步变化,变化的间隔为20,即start=0(第一页),start=20(第二页),以此类推,所以我们得出.format(i*20),大家可以对比第二篇的翻页。

二:comments

  • 我们抓取了img、name、text需要有序的排列,即采用append函数,依次把他们放入comments。

三:json

  • 之前我们用得.text是需要网页返回文本的信息,而这里返回的是json文件,所以用.json
  • 有些电影的导演与影员是同一个人,所以我们用if...else来判断
  • 取出字典中的值,需要在方括号中指明值对应的键


总结:

1:翻页,就是寻找url中的规律,大家可以对比第二篇的翻页。

2:豆瓣评分最高的居然是 《地球脉动2:奇迹世界》,大家一定要去看看哦

3:建议大家放慢抓取速度哦,运用import time time.sleep(1)。


  • 下一篇文章,将继续扩大难度,抓取知乎内容,需要运用到请求头(headers):豆瓣就像大门没有上锁,而知乎上了锁,headers就像一把钥匙,这样解释是不是很形象呢。
  • 有不清楚的地方,大家可以留言,点赞,我看到了,会第一时间回复你。
  • 本系列文章同步跟新于微信公众号工科男雷先生

编辑于 2017-12-28 17:40