zoukankan      html  css  js  c++  java
  • Scrapy库安装和项目创建

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

    scrapy库安装

      使用pip命令安装scrapy,在安装过程中可能会因为缺少依赖库而报错,根据报错提示依次下载需要的依赖库,下载过程中注意系统类型和Python版本

      我在安装过程中依次安装的库有:

      pip install pywin32-223-cp36-cp36m-win32.whl

      pip install Twisted-17.9.0-cp36-cp36m-win32.whl

      pip install scrapy

      Unofficial Windows Binaries for Python Extension Packages:https://www.lfd.uci.edu/~gohlke/pythonlibs/

    创建项目

      scrapy安装成功后打开cmd进入想要存储scrapy项目的目录使用startproject命令创建一个新项目:

    D:>scrapy startproject scraptest
    New Scrapy project 'scraptest', using template directory 'c:\python36-32\lib\
    site-packages\scrapy\templates\project', created in:
        D:scraptest
    
    You can start your first spider with:
        cd scraptest
        scrapy genspider example example.com

    在D:scraptest目录下会生成对应的架构目录树

    scrapytest/
        scrapy.cfg
        scrapytest/
            __init__.py
            items.py          #定义抓取域的模型
            pipelines.py
            settings.py       #定义一些设置,如用户代理、爬取延时等
            middlewares.py
            __pycache__/
            spiders/
                __pycache__/
                __init__.py

    创建爬虫

      使用genspider命令,传入爬虫模块名、域名以及可选模块参数

    D:scraptest>scrapy genspider country example.webscraping.com
    Created spider 'country' using template 'basic' in module:
      scraptest.spiders.country

    D:scraptestscraptestspiders目录下创建country.py

    # -*- coding: utf-8 -*-
    import scrapy
    
    class CountrySpider(scrapy.Spider):
        name = 'country'
        allowed_domains = ['example.webscraping.com']
        start_urls = ['http://example.webscraping.com/']
    
        def parse(self, response):
            pass
    1. name作为爬虫名,必须指定名称,根据源码内容,若值为空会提示ValueErro
    2. start_urls位爬取的网页
    3. parse函数名不能修改,这是源码中指定的回调函数

    测试爬虫

    # -*- coding: utf-8 -*-
    import scrapy
    from lxml import etree
    
    class CountrySpider(scrapy.Spider):
        name = 'country'
        allowed_domains = ['example.webscraping.com']
        start_urls = ['http://example.webscraping.com/places/default/view/Afghanistan-1']
    
        #该函数名不能改变,因为scrapy源码中默认callback函数的函数名就是parse
        def parse(self, response):
            tree = etree.HTML(response.text)
            for node in (tree.xpath('//tr/td[@class="w2p_fw"]')):
                print (node.text)

     使用crawl命令,可以根据-s LOG_LEVEL=DEBUG或-s LOG_LEVEL=ERROR来设置日志信息

    D:scraptest>scrapy crawl country --nolog
    None
    647,500 square kilometres
    29,121,286
    AF
    Afghanistan
    Kabul
    None
    .af
    AFN
    Afghani
    93
    None
    None
    fa-AF,ps,uz-AF,tk
    None
  • 相关阅读:
    各种排序算法时间复杂度和空间复杂度表
    where 1=1和 0=1 的作用
    scala map操作 简单总结
    Scala详解---------数组、元组、映射
    Scala之String
    scala object 转Class Scala强制 类型转换
    Scala中的None,Nothing,Null,Nil
    mysql如何更新一个表中的某个字段值等于另一个表的某个字段值
    java.lang.String cannot be cast to scala.runtime.Nothing Scala中的Nothing类型
    mybatis 于 hibernate区别
  • 原文地址:https://www.cnblogs.com/xiaobingqianrui/p/8523304.html
Copyright © 2011-2022 走看看