文档详情

爬虫学习之基于Scrapy的网络爬虫.docx

发布:2018-03-22约字共7页下载文档
文本预览下载声明
爬虫学习之基于Scrapy的网络爬虫   建立目标   同样在做任何事情之前都需要明确目标,那这次我们的目标是爬取一些技术性的文章并存储到数据库中。这就需要有目标网址和数据库结构,数据库我们选择使用MySql,目标网站我们找了一个叫脚本之家的内容站。我们这里首先准备好一张用于存储文章的表结构:   CREATE TABLE `articles` (   `id` mediumint(8) AUTO_INCREMENT NOT NULL,   `title` varchar(255) DEFAULT NULL,   `content` longtext,   `add_date` int(11) DEFAULT 0,   `hits` int(11) DEFAULT 0,   `origin` varchar(500) DEFAULT ,   `tags` varchar(45) DEFAULT ,   PRIMARY KEY (`id`),   KEY `add_date` (`add_date`)   ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;   分析目标结构   这里我们首先需要爬取得入口是“网络编程”这个节点,主入口网址为(/list/index_1.htm) 打开这个网站我们通过Chrome或者其他浏览器的查看元素来分析当前页面的HTML语义结构,如下图所示:   从图中红色框线的部分可以看出,这里是我们需要在“网络编程”这个节点下需要提取的所有文章的主分类入口,通过这些入口可以进去到不同文章分类的列表中。所以根据初步结构分析,我们得出本次爬虫的爬取路线为:   从主入口进去 - 提取当前入口中的所有分类 - 通过分类入口进入到分类列表 - 通过列表进入到文章页   分类入口确定了接下来看看我们的分类列表,随意点开一个分类入口,打开列表如下图所示:   这里我框出了两个主要部分,第一个是文章的标题,第二个是分页,文章对应的URL就是我们接下来需要爬取文章内容的入口,这里需要注意的是分页的处理,通过分页的最后一页我们可以知道当前这类列表共有多少页文章。结合以上分析我们基本确定了本次爬虫的各个路线入口,接下来我们就开始通过程序来实现本次的目标。   实现爬虫   在实现爬虫之前我们通过一张图来对Scrapy有个基本的认识,为了保持本章内容的简洁性,我们这里暂时不会讨论Item Pipeline部分,Scrapy架构图如下所示(图片来自网络):   从图中可以很清晰的看到Scrapy所包含的几大块,下面我们通过代码来演示我们所用到的基础功能部分。   主要依赖第三方库:   web.py web框架,这里只用到了database部分,将来会用来进行内容展示   scrapy 爬虫框架,这里只用到了最基本的内容提取   这里还会用到一些xpath相关知识,请自行Google了解xpath语法   # -*- coding:utf-8 -*-   by sudo rm -rf   import scrapy   from scrapy.http import Request   import web   import time   db = web.database(dbn=mysql, host=, db=imchenkun, user=root, pw=root)   # 允许的站点域   allow_domain =   base_url =   # 列表页   list_url = /list/list_%d_%d.htm   # 列表分页   list_page = 1   # 文章页   crawl_url = /article/%d.htm   class JB51Spider(scrapy.Spider):   name = jb51   start_urls = [   /list/index_1.htm   ]   cate_list = []   def parse(self, response):   cate_id = response.selector.xpath(//div[@class=index_bor clearfix]/div[@class=index_con]/span/a/@href).re((\\\\d+))[::2]   for id in cate_id:   cate_url = list_url % (int(id), 1)   yield Request(cate_url, callback=self.parse_page)   def parse_page(self, response)
显示全部
相似文档