scrapy基本使用(一)

参考文档:Scrapy入门教程 http://scrapy-chs.readthedocs.io/zh_CN/0.24/intro/tutorial.html

scrapy基本使用(二)  http://www.cnblogs.com/zhaijiahui/p/6984640.html

1、 安装

python3.5 按照官网大写的安不上,要是小写的才能安上

pip install scrapy

理论上如果报错,再看几遍就好了,至少我是这样,可能是网络问题吧。

如果出现了这个报错,是twisted的安装问题。

  building 'twisted.test.raiser' extension
error: Microsoft Visual C++ 14.0 is required. Get it with "Microsoft Visual C++ Build Tools": http://landinghub.visualstudio.com/visual-cpp-build-tools

解决方案:

http://www.lfd.uci.edu/~gohlke/pythonlibs/#twisted 下载twisted对应版本的whl文件(如我的Twisted‑17.5.0‑cp36‑cp36m‑win_amd64.whl),cp后面是python版本,amd64代表64位,运行命令:

pip install C:\Users\CR\Downloads\Twisted-17.5.-cp36-cp36m-win_amd64.whl

其中install后面为下载的whl文件的完整路径名
安装完成后,再次运行:

pip install Scrapy

即可成功。

2、 基础操作

1) 创建项目

这是第一步,因为我们要使用人家搭好的框架,这步就是生成框架。

scrapy startproject tutorial

执行成功会在当前目录生成一个文件夹。

2) 文件夹里的内容

官网说的很详细了,这里引用官网,我根据自己浅薄的知识理解一下。

scrapy.cfg: 项目的配置文件

tutorial/: 该项目的python模块。之后您将在此加入代码。(这才是核心呀。。)

tutorial/items.py: 项目中的item文件.(这是创建容器的地方,爬取的信息分别放到不同容器里)

tutorial/pipelines.py: 项目中的pipelines文件.

tutorial/settings.py: 项目的设置文件.(我用到的设置一下基础参数,比如加个文件头,设置一个编码)

tutorial/spiders/: 放置spider代码的目录. (放爬虫的地方)

3) 定义容器(items.py)

我个人认为,容器不用一开始就定好,应该是一点一点加的,但是官网就这个顺序。。

修改items.py

import scrapy

class DmozItem(scrapy.Item): #创建一个类,继承item类,就是继承人家写好的容器嘛
title = scrapy.Field() # 取哪些内容,就创建哪些容器
link = scrapy.Field()
desc = scrapy.Field()

3、 爬虫的编写

例子:

import scrapy

class DmozSpider(scrapy.Spider): # 继承Spider类
name = "dmoz" # 爬虫的唯一标识,不能重复,启动爬虫的时候要用
allowed_domains = ["dmoz.org"] # 限定域名,限定范围,应该是这个意思
start_urls = [ # 链接列表,可以有多个
"http://www.dmoz.org/Computers/Programming/Languages/Python/Books/",
"http://www.dmoz.org/Computers/Programming/Languages/Python/Resources/"
] def parse(self, response):
filename = response.url.split("/")[-2] # 获取url,用”/”分段,获去倒数第二个字段
with open(filename, 'wb') as f:
f.write(response.body) # 把访问的得到的网页源码写入文件

这里需要重点说一下parse方法

被调用时,每个初始URL完成下载后生成的 Response 对象将会作为唯一的参数传递给该函数。

该方法负责解析返回的数据(response data),提取数据(生成item)以及生成需要进一步处理的URL的 Request 对象。

简单说就是用来编写爬虫的主体,response就是网页源码。

4、 启动爬虫

一条命令:

scrapy crawl dmoz

执行爬虫的时候发生了什么?

Scrapy为Spider的 start_urls 属性中的每个URL创建了 scrapy.Request 对象,并将 parse 方法作为回调函数(callback)赋值给了Request。

例:

yield scrapy.Request(self.url + nextLink, callback=self.parse)

Request对象经过调度,执行生成 scrapy.http.Response 对象并送回给spider parse() 方法。

这里我们了解到请求链接的改变是靠回调函数实现的。

scrapy基本使用(一)的更多相关文章

  1. Scrapy框架爬虫初探——中关村在线手机参数数据爬取

    关于Scrapy如何安装部署的文章已经相当多了,但是网上实战的例子还不是很多,近来正好在学习该爬虫框架,就简单写了个Spider Demo来实践.作为硬件数码控,我选择了经常光顾的中关村在线的手机页面 ...

  2. scrapy爬虫docker部署

    spider_docker 接我上篇博客,为爬虫引用创建container,包括的模块:scrapy, mongo, celery, rabbitmq,连接https://github.com/Liu ...

  3. scrapy 知乎用户信息爬虫

    zhihu_spider 此项目的功能是爬取知乎用户信息以及人际拓扑关系,爬虫框架使用scrapy,数据存储使用mongo,下载这些数据感觉也没什么用,就当为大家学习scrapy提供一个例子吧.代码地 ...

  4. ubuntu 下安装scrapy

    1.把Scrapy签名的GPG密钥添加到APT的钥匙环中: sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 6272 ...

  5. 网络爬虫:使用Scrapy框架编写一个抓取书籍信息的爬虫服务

      上周学习了BeautifulSoup的基础知识并用它完成了一个网络爬虫( 使用Beautiful Soup编写一个爬虫 系列随笔汇总 ), BeautifulSoup是一个非常流行的Python网 ...

  6. Scrapy:为spider指定pipeline

    当一个Scrapy项目中有多个spider去爬取多个网站时,往往需要多个pipeline,这时就需要为每个spider指定其对应的pipeline. [通过程序来运行spider],可以通过修改配置s ...

  7. scrapy cookies:将cookies保存到文件以及从文件加载cookies

    我在使用scrapy模拟登录新浪微博时,想将登录成功后的cookies保存到本地,下次加载它实现直接登录,省去中间一系列的请求和POST等.关于如何从本次请求中获取并在下次请求中附带上cookies的 ...

  8. Scrapy开发指南

    一.Scrapy简介 Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架. 可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中. Scrapy基于事件驱动网络框架 Twis ...

  9. 利用scrapy和MongoDB来开发一个爬虫

    今天我们利用scrapy框架来抓取Stack Overflow里面最新的问题(),并且将这些问题保存到MongoDb当中,直接提供给客户进行查询. 安装 在进行今天的任务之前我们需要安装二个框架,分别 ...

  10. python3 安装scrapy

    twisted(网络异步框架) wget https://pypi.python.org/packages/dc/c0/a0114a6d7fa211c0904b0de931e8cafb5210ad82 ...

随机推荐

  1. Day8--Python--文件操作

    对文件内部的内容进行操作1.open('文件路径', mode='模式(默认是读r)', encoding='编码') 读取内容: f = open('d:/练习.txt', mode='r', en ...

  2. Unity 着色过程

    图形API包括:OpenGL.Metal.Vulkan.Director3D. 渲染管线(图形管线)通用结构: 1.数据收集(图形的网格.纹理.材质)--------2.顶点着色器(获取图形的2D坐标 ...

  3. Luogu P2336 [SCOI2012]喵星球上的点名

    题目链接 \(Click Here\)_ \(200\)行纯干货的代码,一发\(WA\)掉真的是让人窒息,幸好最后找到了锅在哪.(差点就要弃掉了\(QAQ\)) [调出来的时候真的是要高兴到哭出来了\ ...

  4. STM32F407 ------ 使用定时器实现精确延时

    测试环境:主频168M #include "delay.h" void delay_init() { TIM_TimeBaseInitTypeDef TIM_TimeBaseStr ...

  5. 非root用户sudo_ssh免密钥

    非root用户sudo_ssh免密钥 目标:从服务器上ssh登陆后sudo免密钥执行相应的命令 环境介绍: 192.168.65.130 web224 # 步骤一: # 每个节点执行(不是必须,但是建 ...

  6. BZOJ2006 ST表 + 堆

    https://www.lydsy.com/JudgeOnline/problem.php?id=2006 题意:在长度N的序列中求K段长度在L到R之间的区间,使得他们的和最大 很容易想到要求一个前缀 ...

  7. 【.NET】using 语句中使用的类型必须可隐式转换为"System.IDisposable"

    #问题: 在使用EF开发中,出现如下错误:“using 语句中使用的类型必须可隐式转换为“System.IDisposable” #原因: 项目中没有引用 EntityFramework 这个程序集: ...

  8. MyBatis-CURD

    一.接口方法 /** * 删除.修改.添加操作都可以返回三种类型 * Integer.Long.Boolean */ public interface MyUserMapper { public My ...

  9. exp和imp导入导出时表空间问题【未完】

    准备工作 第一步: 创建教师和学生用户 教师用户/密码 TEACHER/t123456 学生用户/密码 STUDENT/s123456 参考链接 http://www.cnblogs.com/what ...

  10. 使用 highlight.js 在网页中高亮显示java 代码 【原】

    <html> <head> <meta charset="UTF-8"> <script src="http://apps.bd ...