爬虫学习之基于scrapy的网络爬虫

上传人:wt****50 文档编号:37125253 上传时间:2018-04-07 格式:DOCX 页数:7 大小:615.21KB
返回 下载 相关 举报
爬虫学习之基于scrapy的网络爬虫_第1页
第1页 / 共7页
爬虫学习之基于scrapy的网络爬虫_第2页
第2页 / 共7页
爬虫学习之基于scrapy的网络爬虫_第3页
第3页 / 共7页
爬虫学习之基于scrapy的网络爬虫_第4页
第4页 / 共7页
爬虫学习之基于scrapy的网络爬虫_第5页
第5页 / 共7页
点击查看更多>>
资源描述

《爬虫学习之基于scrapy的网络爬虫》由会员分享,可在线阅读,更多相关《爬虫学习之基于scrapy的网络爬虫(7页珍藏版)》请在金锄头文库上搜索。

1、爬虫学习之基于 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) D

2、EFAULT 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;分析目标结构这里我们首先需要爬取得入口是“网络编程”这个节点,主入口网址为 (http:/ 打开这个网站我们通过 Chrome 或 者其他浏览器的查看元素来分析当前页面的 HTML 语义结构,如下图所示:从图中红色框线的部分可以看出,这里是我们需要在“网络编程”这个节 点

3、下需要提取的所有文章的主分类入口,通过这些入口可以进去到不同文章分 类的列表中。所以根据初步结构分析,我们得出本次爬虫的爬取路线为:从主入口进去 - 提取当前入口中的所有分类 - 通过分类入口进入到分 类列表 - 通过列表进入到文章页分类入口确定了接下来看看我们的分类列表,随意点开一个分类入口,打 开列表如下图所示:这里我框出了两个主要部分,第一个是文章的标题,第二个是分页,文章 对应的 URL 就是我们接下来需要爬取文章内容的入口,这里需要注意的是分页 的处理,通过分页的最后一页我们可以知道当前这类列表共有多少页文章。结 合以上分析我们基本确定了本次爬虫的各个路线入口,接下来我们就开始通过

4、程序来实现本次的目标。实现爬虫在实现爬虫之前我们通过一张图来对 Scrapy 有个基本的认识,为了保持本 章内容的简洁性,我们这里暂时不会讨论 Item Pipeline 部分,Scrapy 架构图 如下所示(图片来自网络):从图中可以很清晰的看到 Scrapy 所包含的几大块,下面我们通过代码来演 示我们所用到的基础功能部分。主要依赖第三方库:web.py web 框架,这里只用到了 database 部分,将来会用来进行内容展 示scrapy 爬虫框架,这里只用到了最基本的内容提取这里还会用到一些 xpath 相关知识,请自行 Google 了解 xpath 语法# -*- coding:

5、utf-8 -*-by sudo rm -rf http:/import scrapyfrom scrapy.http import Requestimport webimport timedb = web.database(dbn=mysql, host=127.0.0.1, db=imchenkun, user=root, pw=root)# 允许的站点域allow_domain = ““base_url = “http:/“# 列表页list_url = “http:/ 列表分页list_page = 1# 文章页crawl_url = “http:/ JB51Spider(scrapy

6、.Spider):name = “jb51“start_urls = “http:/ = def parse(self, response):cate_id = response.selector.xpath(/divclass=“index_bor clearfix“/divclass=“index_con“/span/a/href).re(d+):2for id in cate_id:cate_url = list_url % (int(id), 1)yield Request(cate_url, callback=self.parse_page)def parse_page(self,

7、response):_params = response.selector.xpath(/divclass=“dxypage clearfix“/alast()/href).re(d+)cate_id = int(_params0) # 分类编号count = int(_params1) # 总页数article_urls = response.selector.xpath(/divclass=“artlist clearfix“/dl/dt/a/href).extract()# 处理第一页for article_url in article_urls:yield Request(base_u

8、rl + article_url, callback=self.parse_article)# 处理其他页for page in range(1, count):url = (list_url % (cate_id, page + 1)yield Request(url, callback=self.parse_list)def parse_list(self, response):“解析文章列表“article_urls = response.selector.xpath(/divclass=“artlist clearfix“/dl/dt/a/href).extract()for arti

9、cle_url in article_urls:yield Request(base_url + article_url, callback=self.parse_article)def parse_article(self, response):“解析文章内容“title = response.selector.xpath(/divclass=“title“/h1/text().extract() 0content = response.selector.xpath(/divid=“content“).extract()0tags = ,.join(response.selector.xpa

10、th(/divclass=“tags mt10“/a/text().extract()results = db.query(select count(0) as total from articles where origin=$origin, vars = origin: response.url )if results0.total = 0:db.insert(articles,title=title,origin=response.url,content=content,add_date=int(time.time(),hits=0,tags=tags)安装 Scrapy 后以上代码通过以下命令执行:scrapy runspider jb51_spider.py本次运行后的效果在数据库中可以见如下图所示:Github 地址总结本篇文章我们主要了解了基本的 Scrapy Spider 部分,而且通过对目标网 站的结构分析使用 xpath 进行内容的提取,以及分页的处理。这里我们的目的 是建立一种写爬虫的思路,而不在于怎么使用工具来爬数据。首先确定目标, 然后分析目标,再借助现有工具进行内容提取,提取内容的过程中会遇到各种 问题,这个时候我们再来逐个解决这些问题,直到我们的爬虫能够无障碍的运 行。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 社会民生

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号