这里是通过爬取伯乐在线的全部文章为例子,让自己先对scrapy进行一个整理的理解 该例子中的详细代码会放到我的github地址:https://github.com/pythonsite/spider/tree/master/jobboleSpider 注:这个文章并不会对详细的用法进行讲解,是为了让对scrapy各个功能有个了解,建立整体的印象。 在学习Scrapy框架之前,我们先通过一个实际的爬虫例子来理解,后面我们会对每个功能进行详细的理解。 分析要爬去的目标站信息先看如下图,首先我们要获取下图中所有文章的连接,然后是进入每个文章连接爬取每个文章的详细内容。 对于该爬虫的一个整体思路我们对这个爬虫进行一个思路整理,通过如下图表示: 以上是我们对这个爬虫需求了解,下面我们通过scrapy爬取我们想要爬取的数据,下面我们先对scrapy进行一个简单的了解 Scrapy的初步认识Scrapy使用了Twisted作为框架,Twisted有些特殊的地方是它是事件驱动的,并且比较适合异步的代码。对于会阻塞线程的操作包含访问文件、数据库或者Web、产生新的进程并需要处理新进程的输出(如运行shell命令)、执行系统层次操作的代码(如等待系统队列),Twisted提供了允许执行上面的操作但不会阻塞代码执行的方法。 items.py 负责数据模型的建立,类似于实体类。 那么如何创建上述的目录,通过下面命令: zhaofandeMBP:python_project zhaofan$ scrapy startproject test1 New Scrapy project 'test1', using template directory '/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/scrapy/templates/project', created in: /Users/zhaofan/Documents/python_project/test1 You can start your first spider with: cd test1 scrapy genspider example example.com zhaofandeMBP:python_project zhaofan$ zhaofandeMBP:test1 zhaofan$ scrapy genspider shSpider hshfy.sh.cn Created spider 'shSpider' using template 'basic' in module: test1.spiders.shSpider 相信上面这段话你肯定会觉得很无聊,所以直接分析爬虫代码。 代码的项目结构items.py代码分析items.py里存放的是我们要爬取数据的字段信息,代码如下: class JoBoleArticleItem(scrapy.Item): title = scrapy.Field() create_date = scrapy.Field() url = scrapy.Field() url_object_id = scrapy.Field() front_image_url = scrapy.Field() front_image_path = scrapy.Field() praise_nums = scrapy.Field() fav_nums = scrapy.Field() comment_nums = scrapy.Field() tag = scrapy.Field() content = scrapy.Field() spiders/Article.py代码分析spiders目录下的Article.py为主要的爬虫代码,包括了对页面的请求以及页面的处理,这里有几个知识点需要注意: 1. 我们爬取的页面时http://blog./all-posts/,所以parse的response,返回的是这个页面的信息,但是我们这个时候需要的是获取每个文章的地址继续访问,这里就用到了yield Request()这种用法,可以把获取到文章的url地址继续传递进来再次进行请求。 ![]() pipeline中代码的分析pipeline主要是对spiders中爬虫的返回的数据的处理,这里我们可以让写入到数据库,也可以让写入到文件等等。 ![]() |
|