已阅读5页,还剩2页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
爬虫学习之基于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 scrapyfrom scrapy.http import Requestimport webimport timedb = 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.htmclass JB51Spider(scrapy.Spider):name = jb51start_urls = /list/index_1.htmcate_list = 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, 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_url + 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 article_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.xpath(/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地址总结本篇文章我们主要了解了
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 临港新建矿用防爆电机生产项目可行性研究报告
- 临港产业园新建卸船机装配厂房项目可行性研究报告
- 工程签证讲解课件
- 中药材生态种植基地可行性研究报告
- 工程全过程咨询课件
- 餐饮企业厨房助手职业技能等级认定模拟试卷及答案
- 工程介绍课件
- 公证员资格考试公证机构与公证员职责专项练习题及答案
- 观潮封面设计课件
- 构成教学课件
- 2026年电池PACK装配工考试试题(含答案)
- 中国海油2027届校园招聘笔试备考题库及答案解析
- 2026年林业部门招聘森林资源保护与利用专项试卷
- 2026秋新苏教版小学科学三年级上册全册教案
- 2026及未来5年中国中药香市场现状数据分析及前景预测报告
- 2026年西安铁路局人员招聘笔试备考题库及详细答案解析
- 2026年河南省巩义市高一化学上册期末考试检测卷含完整答案(全优)
- 2026年《中国慢性肾脏病临床管理指南(2026版)》
- 2026汽车玻璃行业发展现状分析及智能趋势与应用场景研究报告
- 2026光学薄膜产业现状分析及AR-VR驱动与镀膜技术创新
- 2025青岛水务集团有限公司招聘(89人)笔试历年参考题库附带答案详解
评论
0/150
提交评论