专栏首页java一日一条Python爬虫爬取美剧网站

Python爬虫爬取美剧网站

一直有爱看美剧的习惯,一方面锻炼一下英语听力,一方面打发一下时间。之前是能在视频网站上面在线看的,可是自从广电总局的限制令之后,进口的美剧英剧等貌似就不在像以前一样同步更新了。但是,作为一个宅diao的我又怎甘心没剧追呢,所以网上随便查了一下就找到一个能用迅雷下载的美剧下载网站【天天美剧】,各种资源随便下载,最近迷上的BBC的高清纪录片,大自然美得不要不要的。

虽说找到了资源网站可以下载了,但是每次都要打开浏览器,输入网址,找到该美剧,然后点击链接才能下载。时间长了就觉得过程好繁琐,而且有时候网站链接还会打不开,会有点麻烦。正好一直在学习Python爬虫,所以今天就心血来潮来写了个爬虫,抓取该网站上所有美剧链接,并保存在文本文档中,想要哪部剧就直接打开复制链接到迅雷就可以下载啦。

其实一开始打算写那种发现一个url,使用requests打开抓取下载链接,从主页开始爬完全站。但是,好多重复链接,还有其网站的url不是我想的那么规则,写了半天也没有写出我想要的那种发散式的爬虫,也许是自己火候还不到吧,继续努力。。。

后来发现,其电视剧链接都是在文章里面,然后文章url后面有个数字编号,就像这样的http://cn163.net/archives/24016/,所以机智的我又用了之前写过的爬虫经验,解决方法就是自动生成url,其后面的数字不是可以变的吗,而且每部剧的都是唯一的,所以尝试了一下大概有多少篇文章,然后用range函数直接连续生成数来构造url。

但是很多url是不存在的,所以会直接挂掉,别担心,我们用的可是requests,其自带的status_code就是用来判断请求返回的状态的,所以只要是返回的状态码是404的我们都把它跳过,其他的都进去爬取链接,这就解决了url的问题了。

以下就是上述步骤的实现代码。

其余的就进行的很顺利了,网上找到前人写的类似的爬虫,但是只是爬取一篇文章的,所以借鉴了一下其正则表达式。自己用了BeautifulSoup还没有正则效果好,所以果断弃了,学海无涯啊。但是效果也不是那么理想,有一半左右的链接不能正确抓取,还需继续优化。

完整版代码,其中还用到了多线程,但是感觉没什么用,因为Python的GIL的缘故吧,看似有两万多部剧,本以为要很长时间才能抓取完成,但是除去url错误的和没匹配到的,总共抓取时间20分钟不到。搞得我本来还想使用Redis在两台Linux上爬取,但是折腾了一番之后感觉没必要,所以就这样吧,后面需要更大数据的时候再去弄。

还有过程中遇到一个很折磨我的问题是文件名的保存,必须在此抱怨一下,txt文本格式的文件名能有空格,但是不能有斜线、反斜线、括号等。就是这个问题,一早上的时间都花在这上面的,一开始我以为是抓取数据的错误,后面查了半天才发现是爬取的剧名中带有斜杠,这可把我坑苦了。

本文分享自微信公众号 - java一日一条(mjx_java),作者:收听我

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2016-09-06

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 程序员每天都在使用的6个惊讶的软技能

    如果你想要开启作为web开发人员的职业生涯,那么你需要涉及的不仅仅是知道如何写代码。

    哲洛不闹
  • 从根源上解析 Java volatile 关键字的实现

    也就是说,如果一个变量在多个CPU中都存在缓存(一般在多线程编程时才会出现),那么就可能存在缓存不一致的问题。

    哲洛不闹
  • 从根源上解析 Java volatile 关键字的实现

    也就是说,如果一个变量在多个CPU中都存在缓存(一般在多线程编程时才会出现),那么就可能存在缓存不一致的问题。

    哲洛不闹
  • struts标签 checkboxlist 换行解决办法

    struts标签 checkboxlist 默认是不换行的,显示列表会非常丑,百度了一圈解决办法就是要修改源文件

    西门呀在吹雪
  • Audition快捷键

    今天朋友让测试一段代码,功能是音频分割.代码需要输入wav得文件.我手头没有,只好用Au转码一下,好长时间不用Au了.有点忘记操作.记录一下

    云深无际
  • Adobe Audition常用快捷键

    2、播放和录制   播放/停止 【空格】   录制/暂停 【Ctrl】+【空格】   从光标所在处开始播放 【Shift】+【空格】   从头开始播放 【Ctr...

    半夜喝可乐
  • 搭建流媒体服务器 PingOS 平台搭建

    近期由于工作原因需要更换公司原有 RTMP 协议推流,由于 Flash 插件今年年底就淘汰使用,并且一直在寻找一种并发好、延时低、同时便于回放功能的应用,在网上...

    Debug客栈
  • 接口自动化测试平台系列:接口执行顺序与依赖

    在平台中,变量有一种通用的保存方式和存储方式,例如我有一个字段叫variable,那在保存时,会声明一个变量叫VARIABLE,在其他接口引用时使用${VARI...

    软件测试君
  • 先行者成员提问--JavaScript的缩进

    今天在群里有个同学问,说他给github上的一个项目写了个插件,然后对方说他的插件的空格缩进不对,他就想问问几个空格缩进才对? 先说下我的观点,我是4个空格,并...

    web前端教室
  • 收藏!本、硕、博、程序员必备神器

    今天文章超简单,介绍一款免费、开源的公式输入神器给你们,它的名字叫Mathpix spin,工具下载地址在文末。

    AI算法与图像处理

扫码关注云+社区

领取腾讯云代金券