zoukankan      html  css  js  c++  java
  • scrapy简单使用方法

    scrapy简单使用方法

    1.创建项目:
    scrapy startproject 项目名
    例如:
    scrapy startproject baike

    windows下,cmd进入项目路径例如
    d:pythonCodespiderProject>scrapy startproject baidubaike
    将创建项目名为 baidubaike

    2.使用命令创建一个爬虫:
    scrapy genspider 爬虫名称 需要爬取的网址
    scrapy genspider baike baike.baidu.com

    注意:爬虫名称不能和项目名相同

    d:pythonCodespiderProjectaidubaike>scrapy genspider baike baike.baidu.com

    命令执行后将在d:pythonCodespiderProjectaidubaikeaidubaikespiders下,生成baike.py

    3.修改baike.py文件

    import scrapy
    from baidubaike.items import BaidubaikeItem
    from scrapy.http.response.html import HtmlResponse
    from scrapy.selector.unified import SelectorList

    class BaikeSpider(scrapy.Spider):
         #爬虫名称
         name = 'baike'
         #需要爬取的网址
         allowed_domains = ['baike.baidu.com']
         #起始网址
         start_urls = ['https://baike.baidu.com/art/%E6%8B%8D%E5%8D%96%E8%B5%84%E8%AE%AF']

         def parse(self, response):
                 uls = response.xpath("//div[@class='list-content']/ul")
                 for ul in uls:
                       lis = ul.xpath(".//li")
                       #print(lis)
                       for li in lis:
                             title = li.xpath(".//a/text()").get()
                             time = li.xpath(".//span/text()").get()
                             item = BaidubaikeItem(title=title, time=time)
                             yield item

    4.items.py

    import scrapy


    class BaidubaikeItem(scrapy.Item):
           # define the fields for your item here like:
           # name = scrapy.Field()
           # pass
           title = scrapy.Field()
           time = scrapy.Field()

    5.修改settings.py文件
    1)开启 DEFAULT_REQUEST_HEADERS
    修改如下
    DEFAULT_REQUEST_HEADERS = {
         'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
         'Accept-Language': 'en',
         'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36'
    }

    2)将 ROBOTSTXT_OBEY = True 改为 ROBOTSTXT_OBEY = False
    说明:
    默认为True,就是要遵守robots.txt 的规则
    将此配置项设置为 False ,拒绝遵守 Robot协议

    3)开启 ITEM_PIPELINES
    ITEM_PIPELINES = {
         'baidubaike.pipelines.BaidubaikePipeline': 300,
    }
    其中,ITEM_PIPELINES是一个字典文件,键为要打开的ItemPipeline类,值为优先级,ItemPipeline是按照优先级来调用的,值越小,优先级越高。


    6.修改pipelines.py文件
    # -*- coding: utf-8 -*-

    # Define your item pipelines here
    #
    # Don't forget to add your pipeline to the ITEM_PIPELINES setting
    # See: https://doc.scrapy.org/en/latest/topics/item-pipeline.html

    #第一种方式
    #import json
    #
    #class BaidubaikePipeline(object):
    #        def __init__(self):
    #               #pass
    #               self.fp = open('baike.json', 'w', encoding='utf-8')
    #
    #        def open_spider(self, spider):
    #              print('爬虫开始了。。')
    #
    #        def process_item(self, item, spider):
    #               item_json = json.dumps(dict(item), ensure_ascii=False)
    #              self.fp.write(item_json+ ' ')
    #              return item
    #
    #        def close_spider(self, spider):
    #              self.fp.close()
    #              print('爬虫结束了。。')
    #

    #第二种方式
    #from scrapy.exporters import JsonItemExporter
    #
    #class BaidubaikePipeline(object):
    #        def __init__(self):
    #               #pass
    #               self.fp = open('baike.json', 'wb')
    #               self.exporter = JsonItemExporter(self.fp, ensure_ascii=False, encoding='utf-8')
    #              self.exporter.start_exporting()
    #
    #        def open_spider(self, spider):
    #              print('爬虫开始了。。')
    #
    #        def process_item(self, item, spider):
    #              self.exporter.export_item(item)
    #              return item
    #
    #        def close_spider(self, spider):
    #              self.exporter.finish_exporting()
    #              self.fp.close()
    #              print('爬虫结束了。。')

    #第三种方式
    from scrapy.exporters import JsonLinesItemExporter

    class BaidubaikePipeline(object):
          def __init__(self):
                #pass
                self.fp = open('baike.json', 'wb')
                self.exporter = JsonLinesItemExporter(self.fp, ensure_ascii=False, encoding='utf-8')

          def open_spider(self, spider):
                print('爬虫开始了。。')

          def process_item(self, item, spider):
                self.exporter.export_item(item)
                return item

          def close_spider(self, spider):
                self.fp.close()
                print('爬虫结束了。。')

    7.运行爬虫
    scrapy crawl 爬虫名

    d:pythonCodespiderProjectaidubaikeaidubaike>scrapy crawl baike

  • 相关阅读:
    回调函数设计方法
    C 时间函数总结
    linux多线程全面解析
    从为知笔记收费说起
    C++中strftime()的详细说明
    arguments.callee
    arguments 对象
    学习闭包
    this的call,apply,bind的方法总结--追梦子
    this指向--取自追梦子的文章
  • 原文地址:https://www.cnblogs.com/WebLinuxStudy/p/11599519.html
Copyright © 2011-2022 走看看