美文网首页python3爬虫案例详解系列Python爬虫作业我爱编程
python3.6爬虫之豆瓣电影Top200详解(三)

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

作者: 雷荣斌 | 来源:发表于2017-12-28 17:49 被阅读34次

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

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

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

    # -*- coding: utf-8 -*-

    import requests

    import json

    import pandasas 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 iin 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盘

    前言:

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

    同步加载:改变网址上的某些参数会导致网页发生改变,例如:www.itjuzi.com/company?page=1(改变page=后面的数字,网页会发生改变)

    异步加载:改变网址上的参数不会使网页发生改变,例如https://movie.douban.com/tag/#/(翻页后网址不会发生变化)

    ②:判断是何种加载方法

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

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

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

    现重点讲解代码中间部分

    一:真实的urls

    异步加载中,真实的url并非https://movie.douban.com/tag/#/?sort=S&range=0,10&tags=%E7%94%B5%E5%BD%B1,真正的url需要我们通过抓包获取,流程如图:

    所以我们得出真实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:奇迹世界》,大家一定要去看看哦

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

    下一篇文章,将继续扩大难度,抓取知乎内容,需要运用到请求头(headers):豆瓣就像大门没有上锁,而知乎上了锁,headers就像一把钥匙,这样解释是不是很形象呢。

    有不清楚的地方,大家可以留言,点赞,我看到了,会第一时间回复你。

    本文同步更新于微信公众号:工科男雷先生。知乎:雷之

    相关文章

      网友评论

        本文标题:python3.6爬虫之豆瓣电影Top200详解(三)

        本文链接:https://www.haomeiwen.com/subject/jtbvgxtx.html