推荐网址:

  http://scrapy-chs.readthedocs.io/zh_CN/0.24/topics/architecture.html

1.简介

  python开发的一个快速,高层次的屏幕抓去和web抓取框架,用于抓取web站点并从网页中提取结构化的数据。

  是一个框架,可以根据需要进行修改。

  提供了多种类型爬虫的基类,如BaseSpider,sitemap爬虫等。

2.框架

  

3.Scrapy的运行流程

  引擎从调度器中取出一个链接用于接下来的抓取

  引擎把url封装成一个请求传给下载器

  下载器把资源下载下来,并封装成应答包

  爬虫解析response

  解析出实体Item,则交给实体管道进行进一步的处理

  解析出的是链接,则把url交给调度器等待抓取。

二:安装

1.第一步安装lxml

  lxml是一个非常有用的python库,可以灵活高校的解析xml,与bs,requests相结合,是编写爬虫的标准姿势。

  

2.第二步安装zope.interface

  python支持多继承,但是不支持接口,zope.interface是其三方的接口实现库,在twisted中有大量的使用

  

3.第三步安装twisted

  twisted是python实现的基于事件驱动的网络引擎框架。

  支持很多框架,包括UDP,TCP,TLS和其他应用层协议(http,smtp,nntm,irc,xmpp等)

  

4.第四步安装pyOpenSSL

  生成网络安全需要的CA和证书

  

5.第五步pywin32

  pywin32是一个python库,为python访问windows API的扩展,提供了齐全的windows常量,接口,线程以及com机制等

  下载地址:

    https://sourceforge.net/projects/pywin32/files/pywin32/

    

  双击安装

    

6.安装Scrapy

  scrapy不同简单的单线爬虫,采用scrapy框架写python会生成许多的文件,这一件类似java里的web框架,许多工作可以通过配置文件来生成。

  pip install scrapy

  

三:生成项目

1.添加系统变量

  使得scrapy.exe可以被访问到。

  

2.找到要生成项目的目录

  

3.从cmd中进入这个目录

  

4.在这里执行语句

  scrapy startproject test2

  

5.如图

  

四:制作爬虫

1.完成爬虫的流程

  新建项目

  明确目标

  制作爬虫

  存储内容

2.新建项目的目录结构

  

3.解释文件的作用

  scrapy.cfg:项目的配置文件

  test2/:项目中的python模块,将会从这里引用代码

  items.py:项目中items文件用来存放抓取内容容器的文件

  pipelines.py:负责处理爬虫从网页中抽取的实体,持久化实体,验证实体的有效性,清除不需要的信息

  settings.py:项目的设置文件

  spiders:爬虫的目录

4.定义Item

  是用来保存爬取到的数据的容器,

  创建一个scrapy.Item类,并定义类型为scrapy.Field类属性来定义一个Item。

  将爬取的内容与Field()定义的属性对应。

程序:

 # -*- coding: utf-8 -*-
from scrapy import Item,Field class Test2Item(Item):
#电影名
title=Field()
#评分
start=Field()
#评分人数
critical=Field()
#短评
quote=Field()

5.编写Spiders

  创建继承了scrapy.Spider的子类,并定义以下三个属性:

  name:用于区别spider

  start_urls:包含了spider在启动时进行爬取的url列表

  parse():是spider的一个方法,每个初始url完成下载后生成的response对象将会作为唯一的参数传递给该函数,该方法负责解析返回的数据,提取数据以及需要进一步处理的url的request对象。

程序:

 # -*- coding: utf-8 -*-
#下面三行解决的是编码问题。python3不会出现
import sys
reload(sys)
sys.setdefaultencoding('utf-8') from scrapy.spiders import CrawlSpider
from scrapy.http import Request
from scrapy.selector import Selector
from test2.items import Test2Item
import re #继承scrapy.spiders
class Doban(CrawlSpider):
name = "douban"
start_urls=['http://movie.douban.com/top250']
url='http://movie.douban.com/top250'
def parse(self, response):
item=Test2Item()
selector=Selector(response)
Movies=selector.xpath('//div[@class="info"]')
for eachMovie in Movies:
#获取各个字段
fullTitle=eachMovie.xpath('div[@class="hd"]/a/span[@class="title"][1]/text()').extract() start=eachMovie.xpath('div[@class="bd"]/div/span[@class="rating_num"]/text()').extract() criticalStr=eachMovie.xpath('div[@class="bd"]/div/span[4]/text()').extract()[0]
critical= filter(str.isdigit,str(criticalStr)) quote=eachMovie.xpath('div[@class="bd"]/p[@class="quote"]/span/text()').extract() if quote:
quote=quote[0]
else:
quote='' #赋值
item['title']=fullTitle
item['start']=start
item['critical']=critical
item['quote']=quote #提交
yield item
nextLink=selector.xpath('//span[@class="next"]/link/@href').extract()
if nextLink:
nextLink=nextLink[0]
print nextLink
yield Request(self.url+nextLink,callback=self.parse)
return

6.修改settings.py

 USER_AGENT ='Mozilla/5.0 (Macintosh:Intel Mac OS X 10_8_3)' \
'AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.54 Safari/536.5' FEED_URI=u'file:///D:/WorkSpace/python/test2/doban.csv'
FEED_FORMAT='CSV'

7.添加主函数运行

 # -*- coding: utf-8 -*-
from scrapy import cmdline
cmdline.execute("scrapy crawl douban".split())

8.运行结果

  

  

007 爬虫(Scrapy库的使用)的更多相关文章

  1. python3 爬虫 Scrapy库学习1

    1生成项目:生成项目文件夹 scrapy startproject 项目名 2生成爬虫文件 scrapy genspider 爬虫名 指定域名 3进入items文件可以输入自己想要爬取的内容比如 te ...

  2. python爬虫scrapy框架——人工识别登录知乎倒立文字验证码和数字英文验证码(2)

    操作环境:python3 在上一文中python爬虫scrapy框架--人工识别知乎登录知乎倒立文字验证码和数字英文验证码(1)我们已经介绍了用Requests库来登录知乎,本文如果看不懂可以先看之前 ...

  3. [python爬虫]Requests-BeautifulSoup-Re库方案--robots协议与Requests库实战

    [根据北京理工大学嵩天老师“Python网络爬虫与信息提取”慕课课程编写 慕课链接:https://www.icourse163.org/learn/BIT-1001870001?tid=100223 ...

  4. Python 爬虫-Scrapy爬虫框架

    2017-07-29 17:50:29 Scrapy是一个快速功能强大的网络爬虫框架. Scrapy不是一个函数功能库,而是一个爬虫框架.爬虫框架是实现爬虫功能的一个软件结构和功能组件集合.爬虫框架是 ...

  5. Scrapy库安装和项目创建

    Scrapy是一个流行的网络爬虫框架,从现在起将陆续记录Python3.6下Scrapy整个学习过程,方便后续补充和学习.本文主要介绍scrapy安装.项目创建和测试基本命令操作 scrapy库安装 ...

  6. Python网咯爬虫 — Scrapy框架应用

    Scrapy框架       Scrapy是一个高级的爬虫框架,它不仅包括了爬虫的特征,还可以方便地将爬虫数据保存到CSV.Json等文件中.       Scrapy用途广泛,可以用于数据挖掘.监测 ...

  7. [爬虫] requests库

    requests库的7个常用方法 requests.request() 构造一个请求,支撑以下各种方法的基础方法 requests.get() 获取HTML网页的主要方法,对应于HTTP的GET re ...

  8. <scrapy爬虫>scrapy命令行操作

    1.mysql数据库 2.mongoDB数据库 3.redis数据库 1.创建项目 scrapy startproject myproject cd myproject 2.创建爬虫 scrapy g ...

  9. 安装python爬虫scrapy踩过的那些坑和编程外的思考

    这些天应朋友的要求抓取某个论坛帖子的信息,网上搜索了一下开源的爬虫资料,看了许多对于开源爬虫的比较发现开源爬虫scrapy比较好用.但是以前一直用的java和php,对python不熟悉,于是花一天时 ...

  10. 网页爬虫--scrapy入门

    本篇从实际出发,展示如何用网页爬虫.并介绍一个流行的爬虫框架~ 1. 网页爬虫的过程 所谓网页爬虫,就是模拟浏览器的行为访问网站,从而获得网页信息的程序.正因为是程序,所以获得网页的速度可以轻易超过单 ...

随机推荐

  1. 批量更新demo

    因为批量更新数据库的时候,如果数据量太多,就会报错,这时候可以通过逻辑,批量更新,demo如下 @Test public void testbatch() { /** * 批量的值 */ int ma ...

  2. NYOJ 数独 DFS

    数独 时间限制:1000 ms  |  内存限制:65535 KB 难度:4   描述 数独是一种运用纸.笔进行演算的逻辑游戏.玩家需要根据9×9盘面上的已知数字,推理出所有剩余空格的数字,并满足每一 ...

  3. C#(.net)水印图片的生成

    /* * *    使用说明: * 建议先定义一个WaterImage实例 * 然后利用实例的属性,去匹配需要进行操作的参数 * 然后定义一个WaterImageManage实例 * 利用WaterI ...

  4. C++传递二维数字给一个自定义函数

    如果参数是多维数组,那么参数必须指明第一维意外得所有未得长度:比如你的 void tt(char a[][20])或者 void tt(char (*a)[20]) 另外这样也是可以的char *a[ ...

  5. 【译】第九篇 Replication:复制监视器

    本篇文章是SQL Server Replication系列的第九篇,详细内容请参考原文. 复制监视器允许你查看复制配置组件的健康状况.这一篇假设你遵循前八篇,并且你已经有一个合并发布和事务发布.启动复 ...

  6. scrapy 爬虫踩过的坑(II)

    同事写了个爬虫,逻辑上看着没什么问题,但是一直报错:Request url must be str or unicode…… 打印了一下url 和url 的类型,确实是 unicode 懵逼…… 打印 ...

  7. 关于onConfigurationChanged

    这两天测试app时,发现一个奇怪问题,app在启动后,Activity会onCreate两次,起初以为是横屏设置导致,随即在Activity中添加了android:configChanges=&quo ...

  8. ORB_SLAM2 源码阅读 ORB_SLAM2::Initializer::ComputeF21 (OpenCV 细节)

    ORB_SLAM2 计算 F21 的代码是这样的. cv::Mat Initializer::ComputeF21(const vector<cv::Point2f> &vP1,c ...

  9. Web测试技术要领

    基于Web的系统测试与传统的软件测试既有相同之处,也有不同的地方,对软件测试提出了新的挑战.基于Web的系统测试不但需要检查和验证是否按照设计的要求运行,而且还要评价系统在不同用户的浏览器端的显示是否 ...

  10. JS判断是否是PC端访问网站

    function IsPC() { var userAgentInfo = navigator.userAgent; var Agents = ["Android", " ...