为啥要做 Python 爬虫, 是因为我去找电影的某个网站有点坑, 它支持 tag 标签查询自己喜欢的电影, 但是不支持双标签或者三标签查询. 由于一个电影对应多种类型 (tag), 这就意味着, 我需要进入这个电影介绍界面, 看看他的 tag 是不是我需要的. 太麻烦了. 于是我想着做一个 python 爬虫.
首先需求分析.
流程如下: 在网站的主界面获得每部电影的 URL--进入每部电影的介绍界面 --判断它的 tag 是否符合要求, 如果符合返回这部电影的名字 --把满足条件的 URL 和电影名字保存为文件 --下一页
很简单的一个需求, 基本两个 FOR 循环解决问题.
之前是做 java 的, Java 也能做, 但是一直听说 python 爬虫 python 爬虫, 于是想着既然 python 简单, 那么就用 python 来做吧. 的确简单.
首先安装好 python, 这不用多说.
然后上知乎搜索一下 "python 爬虫", 大致看了几篇文章, 推荐用 Requests 和 Scrapy 的比较多. Scrapy 是个爬虫框架, 我这么简单的需求要框架干嘛. 就决定用 requests 了.
pip install requests
首先装好 requests, 按照知乎上的教程, 在 python 自带的编辑器上打出下面的代码:
- import requests
- response = requests.get('https://www.baidu.com/')
- context = response.text
- print(context)
看到控制台上输出一串字符, 颇有成就感. 毕竟自己的第一个 python 程序啊.
但问题出现了, 我要爬取的网站需要 FQ 啊. 在网上搜了一下, requests 支持代理, 于是又加了下面的代码:
可以用, 但代码行数已经有点多了, 我需要一个 python 编辑器, 虽然我装有宇宙第一 IDE, 但我当时并不知道 VS 支持 python 的, 毕竟我只用它来写. Net 程序. 于是上网搜一下, 都推荐 pycharm, 好, 就是你了.
安装调试好 pycharm, 又按照网上的教程亦步亦趋的继续.
又出现了个问题, 谷歌一下说是缩进的问题 (吐槽一下, 我一整天, 遇到的大部分问题都是缩进问题), 我检查了一下, 缩进没问题啊. 把代码复制到 NotePad++ 里检查一下, 原来 Pycharm 会自动把 tab 制表符换为四个空格, 由于我是用 NotePad++ 和 Pycharm 混合编辑这个 py 文件的, 导致里面的代码, 缩进部分有的是 [tab], 有的是四个空格, 操蛋, 原来 Python 不支持 tab 和空格混用. 于是改为用 NotePad++ 编辑, 使用 Pycharm 运行.
很好, 这个 requests 我至少会用他的 get 方法了, 其他的我暂时还用不到, 现在需要的是使用正则找到这些电影的 URL. 顺便在吃午饭的时候大致看了一下廖雪峰的 Python 教程, 看了一下基本语法.
网址: https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000
我对正则也不是很了解, 不过我现在只需要写一个能用的程序, 于是使用最简单暴力的方式: 取那个 URL 所在的那一整块, 到时候用字符串截取的方式把多余的部分截取掉就行了. 这样对正则表达式的要求就简单多了.
遍历每个 URL, 再使用 requests 获取到网页内容, 使用正则获取到网页内容中的 tag 部分, 查找这些 tag 有没有自己需要的.
这时我又遇见一个缩进问题, 检查了半天, 报错那一行格式没问题啊. 又再检查整体代码, 嘛, 我一个 try 忘记写 excep 了, 那么你报 try 的错误啊, 报缩进错误干嘛.
还有一次也是同样的缩进的问题, 检查了半天, 报错的那一行的确格式没问题啊, 突然看到, 我一个 else: 没有写要处理的内容就直接跳出一个 if 代码块了, 是不是这个导致的, 把这个 else: 删掉. 问题解决.
真坑.
总体而言, python 作为一门弱类型语言, 还是挺容易上手的, 我之前都没有接触过 python, 一天之内通过各种谷歌的方式竟然写了一个能用的脚本了. 要是放在 java 或者 C#, 一天的时间可能还在忙活着装 java 环境, 配置 IDE, 了解各个数据类型那些.
但 python 的缩进的确是个大坑.
python 的运行速度真心慢. 当然比我人工快多了, 以后可以考虑多线程的情况.
PS: 你问我找这么多电影干嘛?
这种需要快进看的电影, 当然多多益善了.
来源: http://www.bubuko.com/infodetail-2742318.html