还没写过爬虫的小白点进来,一文带你入门python爬虫(小白福利)

入门html

准备工做python

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

随便建一个工做目录,而后用命令行创建一个工程,工程名为miao,能够替换为你喜欢的名字。数据库

scrapy startproject miao浏览器

随后你会获得以下的一个由scrapy建立的目录结构python2.7

在spiders文件夹中建立一个python文件,好比miao.py,来做为爬虫的脚本。内容以下:scrapy

先跑一下试试看ide

若是用命令行的话就这样:函数

cd miao工具

scrapy crawl NgaSpider

你能够看到爬虫君已经把你坛星际区第一页打印出来了,固然因为没有任何处理,因此混杂着html标签和js脚本都一并打印出来了。

解析

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

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

为何不试试神奇的xpath呢

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

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

 

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

因而咱们用xpath的绝对定位方法,把class='topic'的部分摘出来。

看看xpath的效果

在最上面加上引用:

from scrapy import Selector

把parse函数改为:

小编推荐一个学Python的学习裙【 二二七,四三五,四五零 】,不管你是大牛仍是小白,是想转行仍是想入行均可以来了解一块儿进步一块儿学习!裙内有开发工具,不少干货和技术资料分享!但愿新手少走弯路

再次运行就能够看到输出你坛星际区第一页全部帖子的标题和url了。

递归

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

这里须要用到python的yield。

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

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

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

完整的代码以下:

到此为止,这个爬虫能够爬取你坛第一页全部的帖子的标题,并爬取每一个帖子里第一页的每一层楼的内容。

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

Pipelines——管道

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

0.定义一个Item

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

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

写一个处理方法

在miao文件夹下面找到那个pipelines.py文件,scrapy以前应该已经自动生成好了。咱们能够在此建一个处理方法。

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

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

在配置文件里指定这个pipeline

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

ITEM_PIPELINES = {

'miao.pipelines.FilePipeline': 400,

}

这样在爬虫里调用的时候都会由经这个FilePipeline来处理。后面的数字400表示的是优先级。

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

能够这样配置多个pipeline:

Middleware——中间件

经过Middleware咱们能够对请求信息做出一些修改,好比经常使用的设置UA、代理、登陆信息等等均可以经过Middleware来配置。

Middleware的配置

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

DOWNLOADER_MIDDLEWARES = {

"miao.middleware.UserAgentMiddleware": 401,

"miao.middleware.ProxyMiddleware": 402,

}

破网站查UA, 我要换UA

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

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

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

破网站封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文件,填这个文件所在的目录。

示例:

按小绿箭头就能够愉快地调试了

相关文章
相关标签/搜索