为啥要做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程序啊。

但问题出现了,我要爬取的网站需要翻墙啊。在网上搜了一下,requests支持代理,于是又加了下面的代码:

proxies = {
'https': 'https://127.0.0.1:1080',
'http': 'http://127.0.0.1:1080'
}
headers = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36'
}

可以用, 但代码行数已经有点多了,我需要一个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: 你问我找这么多电影干嘛?

这种需要快进看的电影,当然多多益善了。

记一次Python爬虫开发经历的更多相关文章

  1. Python爬虫开发与项目实战

    Python爬虫开发与项目实战(高清版)PDF 百度网盘 链接:https://pan.baidu.com/s/1MFexF6S4No_FtC5U2GCKqQ 提取码:gtz1 复制这段内容后打开百度 ...

  2. Python爬虫开发

    1. 语法入门 Python教程 2. 爬虫学习系列教程 1)宁哥的小站 https://github.com/lining0806/PythonSpiderNotes 2)Python爬虫开发 3) ...

  3. Python爬虫开发与项目实战pdf电子书|网盘链接带提取码直接提取|

    Python爬虫开发与项目实战从基本的爬虫原理开始讲解,通过介绍Pthyon编程语言与HTML基础知识引领读者入门,之后根据当前风起云涌的云计算.大数据热潮,重点讲述了云计算的相关内容及其在爬虫中的应 ...

  4. Python爬虫开发教程

     正文   现在Python语言大火,在网络爬虫.人工智能.大数据等领域都有很好的应用.今天我向大家介绍一下Python爬虫的一些知识和常用类库的用法,希望能对大家有所帮助.其实爬虫这个概念很简单,基 ...

  5. Python爬虫开发【第1篇】【Scrapy框架】

    Scrapy 框架介绍 Scrapy是用纯Python实现一个为了爬取网站数据.提取结构性数据而编写的应用框架. Srapy框架,用户只需要定制开发几个模块就可以轻松的实现一个爬虫,用来抓取网页内容以 ...

  6. Python爬虫开发【第1篇】【Scrapy shell】

    Scrapy Shell Scrapy终端是一个交互终端,我们可以在未启动spider的情况下尝试及调试代码,也可以用来测试XPath或CSS表达式,查看他们的工作方式,方便我们爬取的网页中提取的数据 ...

  7. Python爬虫开发【第1篇】【Scrapy入门】

    Scrapy的安装介绍 Scrapy框架官方网址:http://doc.scrapy.org/en/latest Scrapy中文维护站点:http://scrapy-chs.readthedocs. ...

  8. Python爬虫开发【第1篇】【机器视觉及Tesseract】

    ORC库概述 在读取和处理图像.图像相关的机器学习以及创建图像等任务中,Python 一直都是非常出色的语言.虽然有很多库可以进行图像处理,但在这里我们只重点介绍:Tesseract 1.Tesser ...

  9. Python爬虫开发【第1篇】【动态HTML、Selenium、PhantomJS】

    JavaScript JavaScript 是网络上最常用也是支持者最多的客户端脚本语言.它可以收集用户的跟踪数据,不需要重载页面直接提交表单,在页面嵌入多媒体文件,甚至运行网页游戏. 我们可以在网页 ...

随机推荐

  1. Spring 学习笔记之整合Hibernate

    Spring和Hibernate处于不同的层次,Spring关心的是业务逻辑之间的组合关系,Spring提供了对他们的强大的管理能力, 而Hibernate完成了OR的映射,使开发人员不用再去关心SQ ...

  2. 【Android】Android之Copy and Paste

    Android为复制粘贴提供了一个强大的基于剪切板的框架,它支持简单和复杂的数据类型,包括纯文本,复杂的数据结构,二进制流,甚至app资源文件.简单的文本数据直接存储在剪切板中,而复杂的数据则存储的是 ...

  3. [SCOI2009]生日礼物

    https://www.luogu.org/problem/show?pid=2564 题目描述 小西有一条很长的彩带,彩带上挂着各式各样的彩珠.已知彩珠有N个,分为K种.简单的说,可以将彩带考虑为x ...

  4. 「6月雅礼集训 2017 Day10」perm(CodeForces 698F)

    [题目大意] 给出一个$n$个数的序列$\{a_n\}$,其中有些地方的数为0,要求你把这个序列填成一个1到$n$的排列,使得: $(a_i, a_j) = 1$,当且仅当$(i, j) = 1$.多 ...

  5. HDU5852 Intersection is not allowed!

    There are K pieces on the chessboard. The size of the chessboard is N*N. The pieces are initially pl ...

  6. OPENId是什么, OAUTH 是什么

    what is openId open id is said to be a protocol which uses url as username, so if a website supports ...

  7. MongoDB 数据库(1)

    数据库 MongoDB (芒果数据库) 数据存储阶段 文件管理阶段 (.txt .doc .xls) 优点 : 数据可以长期保存 可以存储大量的数据 使用简单 缺点 : 数据一致性差 数据查找修改不方 ...

  8. canvas利用formdata上传到服务器

    1.首先绘制canvas图片 <canvas id="myCanvas" width="100" height="100" style ...

  9. jQuery mobile 滑动打开面板

    一.首先在<head></head>里面引入jQuery库.jQuery mobile库以及jQuery mobile样式 <link rel="stylesh ...

  10. TCP的3次握手/4次握手

    三次握手: 在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接,如图下所示: (1) 第一次握手:建立连接时,客户端A发送SYN包(SYN=j)到服务器B,并进入SYN_SE ...