zoukankan      html  css  js  c++  java
  • 007 爬虫(Scrapy库的使用)

    推荐网址:

      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()定义的属性对应。

     程序:

     1 # -*- coding: utf-8 -*-
     2 from scrapy import Item,Field
     3 
     4 class Test2Item(Item):
     5     #电影名
     6     title=Field()
     7     #评分
     8     start=Field()
     9     #评分人数
    10     critical=Field()
    11     #短评
    12     quote=Field()

     5.编写Spiders

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

      name:用于区别spider

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

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

    程序:

     1 # -*- coding: utf-8 -*-
     2 #下面三行解决的是编码问题。python3不会出现
     3 import sys
     4 reload(sys)
     5 sys.setdefaultencoding('utf-8')
     6 
     7 from scrapy.spiders import CrawlSpider
     8 from scrapy.http import Request
     9 from scrapy.selector import Selector
    10 from test2.items import Test2Item
    11 import re
    12 
    13 #继承scrapy.spiders
    14 class Doban(CrawlSpider):
    15     name = "douban"
    16     start_urls=['http://movie.douban.com/top250']
    17     url='http://movie.douban.com/top250'
    18     def parse(self, response):
    19         item=Test2Item()
    20         selector=Selector(response)
    21         Movies=selector.xpath('//div[@class="info"]')
    22         for eachMovie in Movies:
    23             #获取各个字段
    24             fullTitle=eachMovie.xpath('div[@class="hd"]/a/span[@class="title"][1]/text()').extract()
    25 
    26             start=eachMovie.xpath('div[@class="bd"]/div/span[@class="rating_num"]/text()').extract()
    27 
    28             criticalStr=eachMovie.xpath('div[@class="bd"]/div/span[4]/text()').extract()[0]
    29             critical=  filter(str.isdigit,str(criticalStr))
    30 
    31             quote=eachMovie.xpath('div[@class="bd"]/p[@class="quote"]/span/text()').extract()
    32 
    33             if quote:
    34                 quote=quote[0]
    35             else:
    36                 quote=''
    37 
    38             #赋值
    39             item['title']=fullTitle
    40             item['start']=start
    41             item['critical']=critical
    42             item['quote']=quote
    43 
    44             #提交
    45             yield item
    46         nextLink=selector.xpath('//span[@class="next"]/link/@href').extract()
    47         if nextLink:
    48             nextLink=nextLink[0]
    49             print nextLink
    50             yield Request(self.url+nextLink,callback=self.parse)
    51         return

     6.修改settings.py

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

     7.添加主函数运行

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

     8.运行结果

      

      

  • 相关阅读:
    SQL Server 阻止了对组件 'Ole Automation Procedures' 的 过程'sys.sp_OACreate' 的访问
    谷歌浏览器扩展程序manifest.json参数详解
    获取天气api
    UVA 10385 Duathlon
    UVA 10668 Expanding Rods
    UVALIVE 3891 The Teacher's Side of Math
    UVA 11149 Power of Matrix
    UVA 10655 Contemplation! Algebra
    UVA 11210 Chinese Mahjong
    UVA 11384 Help is needed for Dexter
  • 原文地址:https://www.cnblogs.com/juncaoit/p/7616935.html
Copyright © 2011-2022 走看看