查看原文
其他

春节假期临近,来爬爬豆瓣看看有什么好剧

The following article is from 功夫计量经济学 Author 江河JH

临近春节,大多数人忙忙碌碌的一年即将结束,也难得有几天的闲暇假期。不得不说,此时的假期真的太适合躺在被窝里追剧了,今天咱们就来爬一爬豆瓣评分top200的国产电视剧,看看有什么好剧值得推荐。

分析部分

貌似豆瓣这个网站是所有爬虫er必学的一课了,各种爬虫课程几乎都有将豆瓣作为动态加载技术的标准案例,俗话说“枪打出头鸟”(豆瓣是被迫出头的,哈哈哈),豆瓣难免遭受爬虫er的“屠戮”。不过,正如我们所见,豆瓣依然稳定地、坚挺地“存活”到了现在,所以豆瓣还是强啊!
豆瓣电视剧(网址:https://movie.douban.com/tv/#!type=tv&tag=国产剧&sort=rank&page_limit=20&page_start=0)是一个标准的ajax动态加载页面,在你打开这个页面时,网页仅仅会展现部分数据,在你点击“加载更多”后,后面的数据才会加载出来,每点击一次,页面会增加20条数据。

对于动态加载页面,最好的应对策略就是抓包分析。右键选择检查看network(或者F12),我们即可打开浏览器自带抓包工具。首先,我们通过搜索网页内容(父母爱情),在一系列数据包中找到我们想要的内容。对于中文,这个网页并没有将其转换为Unicode编码格式,所以我们可以轻松搜到,这样我们就找到了数据所在的数据包。

点开Headers,我们就可以看到这个网站的请求方式和一系列参数。Request Method为GET,这就表明这个网页的请求方式为GET,GET请求的参数会直接暴露在URL上。翻到最下方,我们可以看到该GET请求的参数字典Parameters,其中最重要的两个参数就是page_limit和page_start,page_limit用来设定页面数据量,page_start用来设定页面开始位置。通过在循环中设定page_start参数,我们就可爬取指定数量的数据。

在Response Headers中我们可以看到Content-Type为application/json,这就说明这些数据是以json格式存储的。对于json数据,我们可以使用json.loads()方法将其转换为python字典格式,然后就可以很轻松地进行数据提取了。

代码部分

分析完毕,接下来,我们就可以开始写代码了。一切都是常规套路和常规操作,我们首先使用requests库中get方法对该网站发起请求,然后借助循环设定page_start参数,在获取到json格式数据后,将其转为字典后进行数据提取。不过要特别注意的是,豆瓣这个网站是需要登录的,所以在请求头headers中要加cookie,复制图中那一大串到指定位置就好了。

import requests
import json
from lxml import etree
import time

url = 'https://movie.douban.com/j/search_subjects?'
headers = {
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.204 Safari/537.36',
    'Cookie''请复制你的cookie到这里就好'
}
for i in range(0,200,20):
    params = {
        'type''tv',
        'tag''国产剧',
        'sort''rank',
        'page_limit''20',
        'page_start': i,
    }
    response = requests.get(url,params=params,headers=headers).text
    datas = json.loads(response)
    for data in datas['subjects']:
        title = data['title'#剧名
        rate = data['rate'#豆瓣评分
        page_url = data['url'#详情页url
        # print(title,rate,page_url)
        try:
            response2 = requests.get(page_url,headers=headers).text
            html = etree.HTML(response2)
            director = "、".join(html.xpath('//div[@id="info"]/span[1]/span[2]/a/text()')) #导演
            screenwriter = "、".join(html.xpath('//div[@id="info"]/span[2]/span[2]/a/text()')) #编剧
            actor = "、".join(html.xpath('//div[@id="info"]/span[3]/span[2]/a/text()')[:5]) #主演
            form = "、".join(html.xpath('//div[@id="info"]/span[@property="v:genre"]/text()')) #类型
            date = "".join(html.xpath('//div[@id="info"]/span[@property="v:initialReleaseDate"]/text()')) #上映时间
            print(title,rate,director,screenwriter,actor,form,date)
            with open(r'D:\爬虫下载\豆瓣电视剧.csv''a'as fp:
                fp.write('%s,%s,%s,%s,%s,%s,%s\t\n' % (title,rate,director,screenwriter,actor,form,date))
        except:
            pass
    time.sleep(5)
这样,我们就爬取了豆瓣评分top200的国产电视剧的相关数据,包括剧名、豆瓣评分、导演、主演、类型和上映时间等信息。需要这份豆瓣评分top200电视剧数据的朋友,请在后台对话框内回复关键词“豆瓣电视剧”。

特别说明:

  • 在此提醒一下大家,大家如果是学习爬虫的话,建议就爬取个几页就行了,并且休息时间设长一点,这样不会对别人服务器造成压力,我们要做有道德的爬虫er!

  • 本推文提供的代码仅供大家学习爬虫之用,请勿使用该代码攻击人家网站,这是不道德的行为!

推荐部分

看着这一份豆瓣电视剧评分排名表,心里感慨万千,我是非常喜欢看电视剧的,尤其是在互联网还没有像今天这样普及的那个年代。豆瓣评分top200的电视剧中,我其实看过不少,这些满满的都是我逝去的青春啊!在此,我也想给大家推荐一些好剧,毕竟科研难有趣味,大家适时可以放松一下,换换脑子。在此也祝愿大家过一个红红火火的新年。
剧名豆瓣评分导演主演上映时间
红楼梦9.6王扶林欧阳奋强、陈晓旭、邓婕1987
父母爱情9.5孔笙郭涛、梅婷、王菁华2014
琅琊榜9.4孔笙、李雪胡歌、刘涛、王凯2015
潜伏9.4姜伟、付玮孙红雷、姚晨、沈傲君2009
大宋提刑官9.3阚卫平何冰、罗海琼、谢兰2005
沉默的真相9.2陈奕甫廖凡、白宇、谭卓2020
闯关东9.2张新建、孔笙李幼斌、萨日娜、宋佳2008
我们的法兰西岁月9.2康洪雷朱亚文、钟秋、李艺科2012
人间正道是沧桑9.1张黎孙红雷、黄志忠、吕中2009
战长沙9.1孔笙、张开宙霍建华、杨紫、左小青2014
白夜追凶9.0王伟潘粤明、王泷正、梁缘2017
隐秘的角落8.9辛爽秦昊、王景春、荣梓杉2020
遇见王沥川8.9陈铭章高以翔、焦俊艳、连凯2016
大江大河8.8孔笙、黄伟王凯、杨烁、董子健2018
风筝8.8柳云龙柳云龙、罗海琼、李小冉2017
恰同学少年8.8龚若飞、嘉娜·沙哈提谷智鑫、钱枫、徐亮2007




对我们的推文累计打赏超过1000元,我们即可给您开具发票,发票类别为“咨询费”。用心做事,不负您的支持!
往期推文推荐
putdocx生成Word文档so easy!

模糊匹配我只用这一招!

利用tushare获取财务数据

爬虫实战|Selenium爬取微信公众号标题与链接

轻轻一点,就知有没有|rqrs命令介绍

强大的正则表达式

自动群发邮件(二)——附带附件

自动群发邮件--email和smtplib基本模块的使用

批量处理变量名和标签的小方法

计算工作日的小能手——workdays

Seminar | 企业错报与银行贷款合同

Seminar | 共同基金行业的性别歧视
Seminar | 来自女儿的塑造:高管、女性社会化与企业社会责任

小贴士:Markdown的基本语法

听说相貌也能量化 | 调用百度人脸检测API实现颜值打分

列出指定属性的变量|findname命令比ds命令

新一代的标签转码小能手
【爬虫实战】亚马逊网站Top100畅销书爬取

Json文件好帮手——JsonPath

数据转置pro之sxpose2
文件"搬家"小助手:mvfiles

pyecharts绘图——河流图展示

你知道MDPI期刊的热门题目吗?

关于我们


微信公众号“Stata and Python数据分析”分享实用的stata、python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。

此外,欢迎大家踊跃投稿,介绍一些关于stata和python的数据处理和分析技巧。
投稿邮箱:statatraining@163.com
投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存