抓取scrapy中文文档 第一个Scrapy项目实现
使用Scrapy这个python的网络爬虫框架抓取Scrapy中文文档
开发第一步:新建项目scrapy startproject myfirst
目录结构:
myfirst
│ scrapy.cfg Scrapy项目配置文件 │ └─myfirst Scrapy项目代码存放目录│ items.py 存储从抓取的网页中需要保存的数据,再其中指定要存储的域│ pipelines.py 管道文件,用于存储从抓取的网页中解析出的其他页面的url,相当于任务队列│ settings.py 爬虫配置文件│ __init__.py │└─spiders 存放爬虫定义的目录__init__.py 编写items.py文件:
from scrapy.item import Item, Field
import sys
default_encoding = 'cp936'
if sys.getdefaultencoding() != default_encoding:
reload(sys)
sys.setdefaultencoding(default_encoding)
class DmozItem(Item):
title = Field()
link = Field()
desc = Field()
在items.py中,定义了三个Field用于指定我们要从抓取的网页数据中抽取的数据
编写爬虫程序myfirstSpider.py,在spiders目录下:
#encoding: utf-8
from scrapy.spider import BaseSpider
from scrapy.selector import HtmlXPathSelector
from scrapy.http import Request
from myfirst.items import MyfirstItem
import os
#设置默认编码
import sys
default_encoding = 'cp936'
if sys.getdefaultencoding() != default_encoding:
reload(sys)
sys.setdefaultencoding(default_encoding)
class ScrapyDocSpider(BaseSpider):
name = 'ScrapyDoc' #设置爬虫的标识名
allowed_domains = ['scrapy-chs.readthedocs.org'] #指定爬虫在哪个域中抓取数据
start_urls = ['http://scrapy-chs.readthedocs.org/zh_CN/latest'] #设置爬虫抓取的入口url地址
def parse(self,response):
if response.url.split("/")[-1] == '':
filename = response.url.split("/")[-2]
else :
dirname = response.url.split("/")[-2]
#判断是否有此目录,如果没有就新建
if os.path.isdir(dirname) == False:
os.mkdir(dirname)
filename = '/'.join(response.url.split("/")[-2:])
#保存文件
open(filename,'wb').write(response.body)
sel = HtmlXPathSelector(response) #创建Html解析器
sites = sel.select('//li[@class="toctree-l1"]')
for site in sites:
item = MyfirstItem()
item['title'] = site.select('a/text()').extract()
#生成连接 begin ,因为从页面提取的连接都是相对地址
link = site.select('a/@href').extract()[0]
url = response.url
#地址形式是否为 ../spiders.html 这种形式,需要回到上级地址
if link.split('/')[0] == '..':
url2 = '/'.join(url.split('/')[0:-2]) + '/' + '/'.join(link.split('/')[1:])
else:
url2 = '/'.join(url.split('/')[0:-1]) + '/' + link
item['link'] = [url2]
#生成连接 end
yield item
#返回多个request
yield Request(url=url2,callback=self.parse)
return
爬虫将从start_urls列表中的url开始,将每一个url封装成Request对象,并将parse方法作为回调函数,将返回的Response作为参数传入,response即返回的响应,其中包含了headers和body,headers即响应的头部信息,body即响应的正文信息(html静态页面或json\xml等。。)
在parse方法中即可以利用html/xml解析器通过xpath抓取特定节点的数据,存储到items.py中的指定field中
并将解析到的页面中的其他url转成request返回,交给spider,由spider存放到pipeline队列中scheduler的调度,继续抓取下一个页面
回到项目主目录,新建doc目录,切到doc目录,doc作为下载的文档存放目录
运行爬虫:
scrapy crawl ScrapyDoc
启动名为ScrapyDoc的爬虫。。。
开始抓取页面 。。。。。。
将从页面中解析的数据保存到item中
scrapy crawl ScrapyDoc -o myfirst.json -t json
最后items中定义的域中的数据将作为json数据存储到myfirst.json文件中
转载于:https://www.cnblogs.com/wuxinqiu/p/3854902.html
抓取scrapy中文文档 第一个Scrapy项目实现相关推荐
- keras中文文档_【DL项目实战02】图像识别分类——Keras框架+卷积神经网络CNN(使用VGGNet)
版权声明:小博主水平有限,希望大家多多指导. 目录: [使用传统DNN] BG大龍:[DL项目实战02]图像分类--Keras框架+使用传统神经网络DNNzhuanlan.zhihu.com [使用 ...
- python3 scrapy中文文档_Scrapy官方文档笔记
1.创建Scrapy项目 首先用cmd命令行去操作,输入 scrapy startproject 项目名 #这里输入的项目名,就是在你输入的目录它会建立一个新的文件夹,这个文件夹里面还是同样名字的一个 ...
- xilinx中文文档编号及其内容简介
目录 前言 一.7系列user guides 二.vivado_user_guides 结束语 前言 为使广大fpga工程师更快捷地找到所需要的xilinx中文文档,笔者在这里对一些常用的xilinx ...
- 一个用php抓取网页中电子邮箱的实例
原文出自: http://outofmemory.cn/code-snippet/36020/php-how-zhuaqu-wangye-youxiangdizhi-code php如何抓取网页中邮箱 ...
- perfect-scrollbar 一个全浏览器适用的自定义scrollbar,使用方法 中文文档
在开发过程中为了保持界面样式的一致性,需要自定义scrollbar的样式,可是只有chrome可以定义样式,IE只能设置颜色,火狐是直接不可以设置,于是就找了这个库,它是github开源的,但没有中文 ...
- Python用不好?终于有官方中文文档啦
点击上方"码农突围",马上关注 这里是码农充电第一站,回复"666",获取一份专属大礼包 真爱,请设置"星标"或点个"在看&quo ...
- FFmpeg 中文文档
ffmpeg的中文文档 Posted on 13 Feb 2015 ffmpegDocuments 添加评论 ffmpeg的文档,把之前三个文章直接合并而成的.没有新的内容和改动. 1. 概要 ...
- kafka中文文档(0.10.0)
kafka中文文档(0.10.0) 作者:链上研发-老杨叔叔 时间:2016-07-22 版本:Apache Kafka 0.10.0 (2016年5月底发布) .目录 kafka中文文档0100 目 ...
- Springboot 中文文档 —— Actuator
文章目录 1 **启用** 2 **端点(endpoints)** 2.1 启用端点 2.2 公开端点 2.3 保护HTTP端点 2.4 配置端点缓存 2.5 配置 /actuator 路径 2.6 ...
- Mitmproxy/mitmdump中文文档以及配置教程
目录 目录 Introduction Features Installation Run Scripts Events 本文是一个较为完整的mitmproxy教程,侧重于介绍如何开发拦截脚本,帮助读者 ...
最新文章
- node/js 漏洞_6个可用于检查Node.js中漏洞的工具
- 华为高级研究员谢凌曦:下一代人工智能计算模型探索
- Java消息队列--ActiveMq 初体验
- android 6.0 adb,安卓6.0,adb停用系统更新
- java 根据类名示例化类_Java LocalDateTime类| ofInstant()方法与示例
- 2022年电商发展分析报告
- JavaScript设计模式返璞归真
- 我国初步建立法规,短期难扭转生物多样性减少趋势
- select在各个浏览器中的兼容性问题
- The Top 8 Security and Risk Trends We’re Watching
- 吗 极域软件可以装win10_关于win10企业版在极域电子教室软件 v4.0 2015 豪华版的全屏控制下如何取得自由...
- 在java中获取全年的节假日(包含周末和法定节假日及调休日)
- 阿里云Blink介绍
- Houdini+UE4制作好看的地形(材质篇)
- Leetcode 368. Largest Divisible Subset
- 图片转文字怎么弄?图文转换方式说明
- Robotium 介绍
- html清除左侧,CSS清除浮动
- Android CMake 编译so库
- 关于业务安全平台架构设计,顶象给“我”讲透了