简单来说互联网是由一个个站点和网络设备组成的大网,我们通过浏览器访问站点,站点把HTML、JS、CSS代码返回给浏览器,这些代码经过浏览器解析、渲染,将丰富多彩的网页呈现我们眼前。如果我们把互联网比作一张大的蜘蛛网,数据便是存放于蜘蛛网的各个节点,而爬虫就是一只小蜘蛛,沿着网络抓取自己的猎物(数据)爬虫指的是:向网站发起请求,获取资源后分析并提取有用数据的程序;从技术层面来说就是 通过程序模拟浏览器请求站点的行为,把站点返回的HTML代码/JSON数据/二进制数据(图片、视频) 爬到本地,进而提取自己需要的数据,存放起来使用。

本文主要内容,以最短的时间写一个最简单的爬虫,可以抓取论坛的帖子标题和帖子内容。本文受众,没写过爬虫的萌新。

入门

0.准备工作

需要准备的东西: Python、scrapy、一个IDE或者随便什么文本编辑工具。

1.技术部已经研究决定了,你来写爬虫。

随便建一个工作目录,然后用命令行建立一个工程,工程名为miao,可以替换为你喜欢的名字。

scrapy startproject miao

随后你会得到如下的一个由scrapy创建的目录结构

在spiders文件夹中创建一个python文件,比如miao.py,来作为爬虫的脚本。

内容如下:

2.跑一个试试?

如果用命令行的话就这样:

cd miaoscrapy crawl NgaSpider

你可以看到爬虫君已经把你坛星际区第一页打印出来了,当然由于没有任何处理,所以混杂着html标签和js脚本都一并打印出来了。

解析

接下来我们要把刚刚抓下来的页面进行分析,从这坨html和js堆里把这一页的帖子标题提炼出来。

其实解析页面是个体力活,方法多的是,这里只介绍xpath。

0.为什么不试试神奇的xpath呢

看一下刚才抓下来的那坨东西,或者用chrome浏览器手动打开那个页面然后按F12可以看到页面结构。

每个标题其实都是由这么一个html标签包裹着的。举个例子:

[合作模式] 合作模式修改设想

可以看到href就是这个帖子的地址(当然前面要拼上论坛地址),而这个标签包裹的内容就是帖子的标题了。

于是我们用xpath的绝对定位方法,把class='topic'的部分摘出来。

1.看看xpath的效果

在最上面加上引用:

from scrapy import Selector

把parse函数改成:

再次运行就可以看到输出你坛星际区第一页所有帖子的标题和url了。

递归

接下来我们要抓取每一个帖子的内容。

这里需要用到python的yield。

yield Request(url=url, callback=self.parse_topic)

此处会告诉scrapy去抓取这个url,然后把抓回来的页面用指定的parse_topic函数进行解析。

至此我们需要定义一个新的函数来分析一个帖子里的内容。

完整的代码如下:

到此为止,这个爬虫可以爬取你坛第一页所有的帖子的标题,并爬取每个帖子里第一页的每一层楼的内容。

爬取多个页面的原理相同,注意解析翻页的url地址、设定终止条件、指定好对应的页面解析函数即可。

Pipelines——管道

此处是对已抓取、解析后的内容的处理,可以通过管道写入本地文件、数据库。

0.定义一个Item

在miao文件夹中创建一个items.py文件。

此处我们定义了两个简单的class来描述我们爬取的结果。

1. 写一个处理方法

在miao文件夹下面找到那个pipelines.py文件,scrapy之前应该已经自动生成好了。

我们可以在此建一个处理方法。

2.在爬虫中调用这个处理方法。

要调用这个方法我们只需在爬虫中调用即可,例如原先的内容处理函数可改为:

3.在配置文件里指定这个pipeline

找到settings.py文件,在里面加入

这样在爬虫里调用

的时候都会由经这个FilePipeline来处理。后面的数字400表示的是优先级。

可以在此配置多个Pipeline,scrapy会根据优先级,把item依次交给各个item来处理,每个处理完的结果会传递给下一个pipeline来处理。

可以这样配置多个pipeline:

Middleware——中间件

通过Middleware我们可以对请求信息作出一些修改,比如常用的设置UA、代理、登录信息等等都可以通过Middleware来配置。

0.Middleware的配置

与pipeline的配置类似,在setting.py中加入Middleware的名字,例如

1.破网站查UA, 我要换UA

某些网站不带UA是不让访问的。

在miao文件夹下面建立一个middleware.py

这里就是一个简单的随机更换UA的中间件,agents的内容可以自行扩充。

2.破网站封IP,我要用代理

比如本地127.0.0.1开启了一个8123端口的代理,同样可以通过中间件配置让爬虫通过这个代理来对目标网站进行爬取。

同样在middleware.py中加入:

很多网站会对访问次数进行限制,如果访问频率过高的话会临时禁封IP。

如果需要的话可以从网上购买IP,一般服务商会提供一个API来获取当前可用的IP池,选一个填到这里就好。

一些常用配置

在settings.py中的一些常用配置

我就是要用Pycharm

如果非要用Pycharm作为开发调试工具的话可以在运行配置里进行如下配置:

Configuration页面:

Script填你的scrapy的cmdline.py路径,比如我的是

/usr/local/lib/python2.7/dist-packages/scrapy/cmdline.py

然后在Scrpit parameters中填爬虫的名字,本例中即为:

crawl NgaSpider

最后是Working diretory,找到你的settings.py文件,填这个文件所在的目录。

示例:

按小绿箭头就可以愉快地调试了。

参考

这里提供了对scrapy非常详细的介绍。

http://scrapy-chs.readthedocs.io/zh_CN/0.24/

以下是几个比较重要的地方:

scrapy的架构:

http://scrapy-chs.readthedocs.io/zh_CN/0.24/topics/architecture.html

xpath语法:

http://www.w3school.com.cn/xpath/xpath_syntax.asp

Pipeline管道配置:

http://scrapy-chs.readthedocs.io/zh_CN/0.24/topics/item-pipeline.html

Middleware中间件的配置:

http://scrapy-chs.readthedocs.io/zh_CN/0.24/topics/downloader-middleware.html

settings.py的配置:

http://scrapy-chs.readthedocs.io/zh_CN/0.24/topics/settings.html

编程语言python入门-手把手教你从零开始用Python语言写爬虫程序相关推荐

  1. PyQt5入门——手把手教你配置环境,快速上手GUI程序开发(Anaconda+PyCharm+Qt Designer+pyuic)

    文章目录 引言 1. 安装python环境 1.1 安装anaconda 1.2 创建虚拟环境 2. 安装PyQt库 3. 安装pycharm 4. 在pycharm中配置PyQt 4.1 配置PyQ ...

  2. 掌握python编程语言tensorflow_手把手教你eclipse集成Python语言+Tensorflow环境

    本文主要向大家介绍了手把手教你eclipse集成Python语言+Tensorflow环境,通过具体的内容向大家展示,希望对大家学习Python语言有所帮助. 1.安装Eclipse 百度Eclips ...

  3. python跑得慢_代码跑得慢甩锅Python?手把手教你如何给代码提速30%

    原标题:代码跑得慢甩锅Python?手把手教你如何给代码提速30% 来源丨Medium 编译丨王转转 大数据文摘出品 https://mp.weixin.qq.com/s/bY3REj6qVw0M1N ...

  4. python手机版做小游戏代码大全-Python大牛手把手教你做一个小游戏,萌新福利!...

    原标题:Python大牛手把手教你做一个小游戏,萌新福利! 引言 最近python语言大火,除了在科学计算领域python有用武之地之外,在游戏.后台等方面,python也大放异彩,本篇博文将按照正规 ...

  5. 手把手教你如何用Python制作一个电子相册?末附python教程

    这里简单介绍一下python制作电子相册的过程,主要用到tkinter和pillow这2个库,tkinter用于窗口显示照片,pillow用来处理照片,照片切换分为2种方式,一种是自动切换(每隔5秒) ...

  6. 软件_手把手教vscode配置c++,python开发环境

    原创:软件_手把手教vscode配置c++,python开发环境 之前主用Python作为项目开发语言,将项目迁移到arm边缘盒子上后发现arm的cpu不给力,软件速度低于预期,所以计划将部分程序改为 ...

  7. 【奥斯卡理财星体系 第五章】丨手把手教你从零开始搭建资产配置

    学习理财良久,依然没有头绪? 有没有简洁明了,循序渐进的课程,能够让我少走弯路,早日变为理财达人呢? 从一个完全的理财小白一路取经的奥斯卡,将手把手教你从零开始建立理财体系! [奥斯卡理财星体系 第五 ...

  8. 用python画皇冠_【推荐】手把手教你如何用Python画一棵漂亮樱花树含源码

    最近给大家整理了一下,挑了一些我觉得不错的代码分享给大家手把手教你如何用Python画一棵漂亮樱花树含源码. 动态生成樱花 效果图(这个是动态的): import turtle as T import ...

  9. 视频教程-Python入门-系列游戏开发/太空阻击-Python

    Python入门-系列游戏开发/太空阻击 20年软件项目开发管理经验 工信部人才交流中心特聘专家讲师 日本U-CAN在线教育特聘主任讲师 国家十二·五规划软件工程教材作者(书:清华大学出版社出版) 中 ...

最新文章

  1. SpringMVC杂记
  2. 以太坊智能合约开发第七篇:智能合约与网页交互
  3. 熟悉Java String的使用,熟悉String的各种函数,Java中各种变量类型
  4. idea 快捷键java
  5. sql下员工工牌(YC0001)的简单实现和一些特殊查询
  6. 计算机体系结构 第一章
  7. 调用未知DLL中的导出函数
  8. android如何删除项目,AndroidStudio中怎样删除项目
  9. 阿里云支持超级账本最新版 其区块链解决方案进入商用阶段
  10. JAVA高性能内存队列-disruptor
  11. 网易编程题------操作序列
  12. JAVA把一个流赋给新的一个流_2020重新出发,JAVA基础,输入/输出(I/O)流
  13. 【云驻共创】华为云数据库之大数据入门与应用(全)
  14. 【信息系统项目管理师】第三章 立项管理思维导图
  15. vue项目报错:warning Disallow self-closing on HTML void elements (<img/>)
  16. 微信开发者工具IDE调试webview内嵌H5方式
  17. 纯css实现的娃娃机web前端html页面源码
  18. VideoView播放视频黑屏问题处理
  19. Java程序员的4大就业方向
  20. 微信公众平台推出微信保护提升微信账号安全 附微信保护开启教程

热门文章

  1. Linux基础——Linux 基本指令 ls 和 cd
  2. 三维重建:三维重建技术概述
  3. static_cast, dynamic_cast, const_cast,reinterpret_cast探讨
  4. Win10 Anaconda下TensorFlow-GPU环境搭建详细教程(包含CUDA+cuDNN安装过程)
  5. 今天又啃了一些數據類型的東西~漸漸地記起了一些東西。
  6. 解决Tomcat version 7.0 only supports J2EE 1.2, 1.3, 1.4, and Java EE 5 and 6 Web modules
  7. Linux恢复删除的文件
  8. 百度音乐下载地址解析
  9. Linux系统修改编码(转)
  10. 如何使用UDP进行跨网段广播