使用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项目实现相关推荐

  1. keras中文文档_【DL项目实战02】图像识别分类——Keras框架+卷积神经网络CNN(使用VGGNet)

    版权声明:小博主水平有限,希望大家多多指导. 目录: [使用传统DNN] BG大龍:[DL项目实战02]图像分类--Keras框架+使用传统神经网络DNN​zhuanlan.zhihu.com [使用 ...

  2. python3 scrapy中文文档_Scrapy官方文档笔记

    1.创建Scrapy项目 首先用cmd命令行去操作,输入 scrapy startproject 项目名 #这里输入的项目名,就是在你输入的目录它会建立一个新的文件夹,这个文件夹里面还是同样名字的一个 ...

  3. xilinx中文文档编号及其内容简介

    目录 前言 一.7系列user guides 二.vivado_user_guides 结束语 前言 为使广大fpga工程师更快捷地找到所需要的xilinx中文文档,笔者在这里对一些常用的xilinx ...

  4. 一个用php抓取网页中电子邮箱的实例

    原文出自: http://outofmemory.cn/code-snippet/36020/php-how-zhuaqu-wangye-youxiangdizhi-code php如何抓取网页中邮箱 ...

  5. perfect-scrollbar 一个全浏览器适用的自定义scrollbar,使用方法 中文文档

    在开发过程中为了保持界面样式的一致性,需要自定义scrollbar的样式,可是只有chrome可以定义样式,IE只能设置颜色,火狐是直接不可以设置,于是就找了这个库,它是github开源的,但没有中文 ...

  6. Python用不好?终于有官方中文文档啦

    点击上方"码农突围",马上关注 这里是码农充电第一站,回复"666",获取一份专属大礼包 真爱,请设置"星标"或点个"在看&quo ...

  7. FFmpeg 中文文档

    ffmpeg的中文文档 Posted on 13 Feb 2015   ffmpegDocuments   添加评论 ffmpeg的文档,把之前三个文章直接合并而成的.没有新的内容和改动. 1. 概要 ...

  8. kafka中文文档(0.10.0)

    kafka中文文档(0.10.0) 作者:链上研发-老杨叔叔 时间:2016-07-22 版本:Apache Kafka 0.10.0 (2016年5月底发布) .目录 kafka中文文档0100 目 ...

  9. Springboot 中文文档 —— Actuator

    文章目录 1 **启用** 2 **端点(endpoints)** 2.1 启用端点 2.2 公开端点 2.3 保护HTTP端点 2.4 配置端点缓存 2.5 配置 /actuator 路径 2.6 ...

  10. Mitmproxy/mitmdump中文文档以及配置教程

    目录 目录 Introduction Features Installation Run Scripts Events 本文是一个较为完整的mitmproxy教程,侧重于介绍如何开发拦截脚本,帮助读者 ...

最新文章

  1. node/js 漏洞_6个可用于检查Node.js中漏洞的工具
  2. 华为高级研究员谢凌曦:下一代人工智能计算模型探索
  3. Java消息队列--ActiveMq 初体验
  4. android 6.0 adb,安卓6.0,adb停用系统更新
  5. java 根据类名示例化类_Java LocalDateTime类| ofInstant()方法与示例
  6. 2022年电商发展分析报告
  7. JavaScript设计模式返璞归真
  8. 我国初步建立法规,短期难扭转生物多样性减少趋势
  9. select在各个浏览器中的兼容性问题
  10. The Top 8 Security and Risk Trends We’re Watching
  11. 吗 极域软件可以装win10_关于win10企业版在极域电子教室软件 v4.0 2015 豪华版的全屏控制下如何取得自由...
  12. 在java中获取全年的节假日(包含周末和法定节假日及调休日)
  13. 阿里云Blink介绍
  14. Houdini+UE4制作好看的地形(材质篇)
  15. Leetcode 368. Largest Divisible Subset
  16. 图片转文字怎么弄?图文转换方式说明
  17. Robotium 介绍
  18. html清除左侧,CSS清除浮动
  19. Android CMake 编译so库
  20. 关于业务安全平台架构设计,顶象给“我”讲透了

热门文章

  1. 泊松分布 二项分布 正态分布之间的联系,与绘制高斯分布图
  2. html视频怎么改大小,对视频大小、比例进行修改
  3. 惠斯通电桥电路 轴扭矩 计算
  4. systrace抓取方式
  5. 宇视NVR设备接入EasyCVR平台,离线后无法上线该如何解决?
  6. jenkins 下载 安装 启动教程-通过war的方式
  7. Yaml:基本语法使用
  8. donet 微服务开发 学习-consul 消费端开发
  9. c语言股票最大收益_C语言买卖股票问题
  10. iOS 实现APP之间内容的拷贝、分享