创建第一个Scrapy工程-糗事百科 最近不少小伙伴儿,问我关于scrapy如何设置headers的问题,时间久了不怎么用,还真有的忘,全靠记忆去写了,为了方便大家参考,也方便我以后的查阅,这篇文章就诞生了。本章内容从实战出发让我们熟悉如何用scrapy写爬虫,本篇内容主要是实战,不讲述过多的理论性东西,因为讲多了我也不知道。 python学习关注我们企鹅qun: 839383 765 各类入门学习资料免费分享哦! Python爬虫入门实战:创建第一个完整的scrapy项目! 明确目标 首先,我们要明确我们的爬虫最终的目的是什么,这里我们要做的是爬取糗事百科的热门分类的前10页信息。包括发布者和内容,因为入门教程所以我们写的简单点主要是熟悉这个过程,这个如何入手呢? 分析链接的变化 一般我们会通过点击下一页,然后观察地址栏的信息来总结规律。 第一页也就是首页地址为:https://www./ 我们点击下一页可以发现第二页的的连接为:https://www./8hr/page/2/ 第三页:https://www./8hr/page/3/ 。。。以此类推第十页的连接为:https://www./8hr/page/10/ 由此我们发现规律,从第二页开始连接可以用https://www./8hr/page/页数/来表示,有时候我比较喜欢试探,怎么说呢,我们知道这个规律是从第二页开始的,但是第一页是没有这个规律,但是我们不防试一试把第一页的https://www./改为https://www./8hr/page/1/。然后我们访问看看ok可以正常显示。 于是我们就确定了链接,也就是页数改为1-10就可以访问相应的页数了。 安装Scrapy 我们要确保正确安装好了scrapy 针对mac和linux直接运行pip安装即可。 <pre >pip install scrapy </pre> 但是windows的坑就比较多了,关于windows的安装请参考我之前写的这篇文章 :https://www.cnblogs.com/c-x-a/p/8996716.html。这里就不多说了。 创建Scrapy工程 好了下面我们开始创建工程首先我们使用scrapy的第一个命令startproject, 使用方法:scrapy startproject xxx xxx就是你的项目名,这里我们给我们的项目起名qiushibaile。 <pre > scrapy startproject qiushibaike </pre> 然后我们会发现了多了一个文件名为qiushibaike的文件夹 然后我们通过命令创建一个事例工程 进入qiushibaikle <pre >cd qiushibaike </pre> 然后用下面scrapy的第二个命令genspider 使用方法 scrapy genspider spider_name domain spider_name就是爬虫的名字,每一个爬虫有一个名字这个名字是唯一的,后面运行的时候也是通过这个名字来运行的,下面的qsbk就是我们的爬虫名字,domain指定爬虫的域也就是爬虫的范围。查找网页我们发现域名为 <pre >scrapy genspider qsbk </pre> 看到以下命令证明我们成功的创建了项目。 <pre >Created spider 'qsbk' using template 'basic' in module: qiushibaike.spiders.qsbk </pre> 开始编写spider文件 我们这里使用pycharm把我们的爬虫工程加载进来。 目录结构如下 (注意:run.py是我后期自己添加的一个爬虫入口文件) 修改settings.py文件 无视robots协议,将 <pre >ROBOTSTXT_OBEY = True </pre> 改为 <pre >ROBOTSTXT_OBEY = False </pre> 修改spider.py 我们先来看看我们访问的网页源码对不对。 把qsbk.py 改为 创建入口文件运行 在项目的根目录下创建一个run.py 来运行我们的工程 python学习关注我们企鹅qun: 8393 83765 各类入门学习资料免费分享哦! run.py的内容如下 <pre ># -- coding: utf-8 -- @Time : 2018/10/31 11:54 PM@Author : cxa@File : run.py.py@Software: PyCharmfrom scrapy.cmdline import execute execute(['scrapy','crawl','qsbk']) </pre> 运行以后我们发现一堆红色的信息,这些都是scrapy 的日志内容,我们注意找是否有黑色字体的内容,一般print出来的内容是黑色字体和含有error的信息,以此了解我们的爬虫哪个地方出错了, 我们找到了error关键字,可以得知我们的爬虫出错了 按照提示可以知道链接被关闭访问失败了,这种情况下我们就被反爬了,常见的应对措施是修改headers头,下面我们就通过修改中间件来修改headers。 修改中间件加入headers信息 首先修改middlewares.py 然后在settings启用我们的中间件和设定MY_USER_AGENT的值: 然后我们再次运行,run.py文件。 再次运行 我们成功获取了源码, 然后我们就需要进行解析内容了。 解析网页中所需要的内容 因为这10页的结构是类似的我们就拿第一页为例: 在这里我们使用的解析方法为xpath,通过xpath可以解析出我们需要的内容, 打开谷歌浏览器的开发者工具,首先通过Elements模块获取当前页所有内容的大概区域我们可以写这样的一个xpath。 <pre >'//div[@id='content-left']' </pre> 然后我们发现一页25个内容,然后再去在每个内容里进行查找当前的标题和内容。 在qsbk.py文件的parse方法里加入这段内容 修改scrapy的日志显示等级方便查看 前面运行过程中我们发现scrapy的日志信息非常的多,不容易找到我们想要的内容,这个时候我们可以通过修改settings.py文件通过修改log的等级,只显示指定类型的log,打开settings.py我们加上下面的一句来设定log的等级为error 也就是只有错误的时候才显示scrapy的log信息。 <pre >LOG_LEVEL = 'ERROR' </pre> 然后再次运行,看到了我们我们需要的内容发布者和发布内容。 得到了这些我们现在只是打印了下,下面我们就来说如何存储 python学习关注我们企鹅qun: 839383 765 各类入门学习资料免费分享哦! 保存结果到mongodb mongodb是一个key-value型的数据库,使用起来简单,数据结构是键值对类型,在存储过程中如果表不存在就会创建一个新的表。 下面我们开始来存储我们的数据。 构造数据 因为我们需要接收一个键值对类型的数据,一般用dict,所以我们将代码改成如下形式。qsbk.py文件新增内容: <pre > item = {} item['name'] = name item['info'] = info yield item </pre> 上面我们构造出了我们需要存储的数据,然后通过yield传递到存储部分, 下一步我们就要开始创建mongo连接的部分了。 创建mongo连接文件 把pipelines.py 文件改为 然后修改settings.py,首先添加mongo的几个连接参数 <pre >MONGO_HOST = '127.0.0.1' # 主机IP MONGO_PORT = 27017 # 端口号 MONGO_DB = 'spider_data' # 库名 MONGO_COLL = 'qsbk' # collection名 </pre> 然后打开pipe通道 <pre >ITEM_PIPELINES = { 'qiushibaike.pipelines.MongoPipeline': 300, } </pre> 运行查看数据 我这里用的adminmongo,打开adminmogo连接数据库,可以看到我们数据已经存在了。 结语 到此为止,我们一个简单完整的scrapy小项目就完成啦,更多python学习可以关注我们哦 注:python学习关注我们企鹅qun: 839383 765 各类入门学习资料免费分享哦! |
|