创建项目

创建项目是爬取内容的第一步,之前已经讲过,Scrapy通过scrapy startproject <project_name>命令来在当前目录下创建一个新的项目。

下面我们创建一个爬取博客园('https://www.cnblogs.com/')文章信息的项目

scrapy startproject cnblog

其中cnblog是你的项目的名字,可以自己定义。

其目录结构如下

cnblog/
scrapy.cfg cnblog/
__init__.py items.py pipelines.py middlewares.py settings.py spiders/
__init__.py

下面简单的讲解一下各目录/文件的作用:

  • scrapy.cfg

    项目的配置文件,带有这个文件的那个目录作为scrapy项目的根目录
  • items.py

    定义你所要抓取的字段
  • pipelines.py

    管道文件,当spider抓取到内容(item)以后,会被送到这里,这些信息(item)在这里会被清洗,去重,保存到文件或者数据库。
  • middlewares.py

    中间件,主要是对功能的拓展,你可以添加一些自定义的功能,比如添加随机user-agent, 添加proxy。
  • settings.py

    设置文件,用来设置爬虫的默认信息,相关功能开启与否,比如是否遵循robots协议,设置默认的headers,设置文件的路径,中间件的执行顺序等等。
  • spiders/

    在这个文件夹下面,编写你自定义的spider。

编写爬虫

编写spider文件

在项目中的spiders文件夹下面创建一个文件,命名为cnblog_spider.py我们将在这个文件里面编写我们的爬虫。先上代码再解释。

import scrapy

class Cnblog_Spider(scrapy.Spider):

    name = "cnblog"
allowed_domains = ["cnblogs.com"]
start_urls = [
'https://www.cnblogs.com/',
] def parse(self, response):
title = response.xpath('//a[@class="titlelnk"]/text()').extract()
link = response.xpath('//a[@class="titlelnk"]/@href').extract()
print(title)
print(link)
  • 导入scrapy模块
  • 定义一个spider类,继承自scrapy.Spider父类。

下面是三个重要的内容

  • name: 用于区别Spider。 该名字必须是唯一的,不可以为不同的Spider设定相同的名字。这一点很重要。
  • start_urls: 包含了Spider在启动时进行爬取的url列表。第一个被获取到的页面将是其中之一。即这是爬虫链接的起点,爬虫项目启动,便开始从这个链接爬取,后续的URL则从初始的URL获取到的数据中提取。
  • parse() 是spider的一个方法。 被调用时,每个初始URL完成下载后生成的 Response 对象将会作为唯一的参数传递给该函数。 该方法负责解析返回的数据(response data),提取数据(生成item)以及生成需要进一步处理的URL的 Request 对象。

修改settings.py文件

将settings.py文件里面的下列内容修改如下,其余的内容不动。

ROBOTSTXT_OBEY = False   #不遵循robots协议

#去掉下面的这个注释,以设置请求头信息,伪造浏览器headers,并手动添加一个user-agent
DEFAULT_REQUEST_HEADERS = {
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Accept-Language': 'en',
#user-agent新添加
'User-Agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36"
}

运行我们的爬虫项目

至此,项目必要的信息已经全部完成了,下面就是运行我们的爬虫项目

进入带有scrapy.cfg文件的那个目录,前面已经说过,这是项目的根目录,执行下面的命令

scrapy crawl cnblog

cnblog是spiders/cnblog_spider.py文件里面我们定义的那个具有唯一性的name

你会发现打印出了博客园首页的文章列表和文章的url信息,如下所示。

Scrapy学习篇(三)之创建项目的更多相关文章

  1. Scrapy学习篇(七)之Item Pipeline

    在之前的Scrapy学习篇(四)之数据的存储的章节中,我们其实已经使用了Item Pipeline,那一章节主要的目的是形成一个笼统的认识,知道scrapy能干些什么,但是,为了形成一个更加全面的体系 ...

  2. Scrapy学习篇(十)之下载器中间件(Downloader Middleware)

    下载器中间件是介于Scrapy的request/response处理的钩子框架,是用于全局修改Scrapy request和response的一个轻量.底层的系统. 激活Downloader Midd ...

  3. Scrapy学习篇(三)之创建项目和Scrapy的安装

    安装Scrapy 了解了Scrapy的框架和部分命令行之后,创建项目,开始使用之前,当然是安装Scrapy框架了. 关于Scrapy框架的安装,请参考:https://cuiqingcai.com/5 ...

  4. Scrapy教程——搭建环境、创建项目、爬取内容、保存文件

    1.创建项目 在开始爬取之前,您必须创建一个新的Scrapy项目.进入您打算存储代码的目录中,运行新建命令. 例如,我需要在D:\00Coding\Python\scrapy目录下存放该项目,打开命令 ...

  5. Maven入门学习,安装及创建项目

    一.maven介绍: 1.maven是一个基于项目对象模型(POM Project Object Model),通过配置文件管理项目的工具(项目管理工具). 2.maven主要功能:发布项目(从编译到 ...

  6. Scrapy学习篇(八)之settings

    Scrapy设定(settings)提供了定制Scrapy组件的方法.你可以控制包括核心(core),插件(extension),pipeline及spider组件.设定为代码提供了提取以key-va ...

  7. Scrapy学习篇(二)之常用命令行工具

    简介 Scrapy是通过Scrapy命令行工具进行控制的,包括创建新的项目,爬虫的启动,相关的设置,Scrapy提供了两种内置的命令,分别是全局命令和项目命令,顾名思义,全局命令就是在任意位置都可以执 ...

  8. Scrapy学习(二)、安装及项目结构

    一.安装 1.安装pywin32,下载地址:https://sourceforge.net/projects/pywin32/files/pywin32/ 我选择的是Build 221,点进去,根据自 ...

  9. maven 学习---使用Maven模板创建项目

    在本教程中,我们将向你展示如何使用mvn archetype:generate从现有的Maven模板列表中生成项目.在Maven 3.3.3,有超过1000+个模板,Maven 团队已经过滤掉一些无用 ...

随机推荐

  1. 从零搭建SSM框架(四)手动实现Tomcat部署

    发布War包 Windows环境部署 增加如下配置 <Context path="/" docBase="cnki" debug="0" ...

  2. a 标签传值

    转载:http://blog.csdn.net/muyeju/article/details/48594377 .<a>标签传值的形式--参数固定:<a href="地址? ...

  3. vim 颜色主题设置

    先看看vim编辑器提供的色彩配置方案: 首先进入vim的color目录(/usr/share/vim/vim74/colors,不同的系统目录不同,建议在-/建立.vim目录,然后在些目录里建立对应的 ...

  4. DNSLOG在渗透测试中的玩法儿

    首先了解一下DNS是啥??? DNS(Domain Name System,域名系统),万维网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读 ...

  5. 笔记本自开wifi设置

    笔记本自开wifi设置 是这样的有些笔记本他自身就可以放出热点供其他的小伙伴们连接,不用非得去下专门的工具有些笔记本的网卡是自带支持双收发的(这里注意我指的是有些笔记本不是全部) 命令我已经写出来了  ...

  6. [Leetcode] Sum 系列

    Sum 系列题解 Two Sum题解 题目来源:https://leetcode.com/problems/two-sum/description/ Description Given an arra ...

  7. sqlite3_get_table()

    { sqlite3 *db; char *errmsg=NULL;    //用来存储错误信息字符串 char ret=0; int my_age=0;    //类型根据要提取的数据类型而定 cha ...

  8. 【SSH项目实战】脚本密钥的批量分发与执行【转】

    [TOC] 前言 <项目实战>系列为<linux实战教学笔记>第二阶段内容的同步教学配套实战练习,每个项目循序衔接最终将组成<Linux实战教学笔记>第二阶段核心教 ...

  9. Java杂知识汇总(自己积累的)

    [前提] 接下来,可能需要开始学习Java了,所以现在将前辈们传递给我的经验都记录下来,免得再次问他们. [积累] 1. 关于重启Tomcat服务器: 当在开发过程中, | 修改Java代码 -- 需 ...

  10. Linux下不能挂载NTFS格式硬盘/U盘

    如果大家以后在Ubuntu系统下面遇到NTFS格式的移动硬盘哪个分区不能挂载的话,可以尝试sudo ntfsfix /dev/你相应的分区