scrapy爬取的資料存入到資料庫中

NO IMAGE

一般我們爬取的資料要存入到資料庫或者生成本地檔案才有意義

一、爬取的資料直接在本地生成檔案

  • 1、方法一、直接在執行命令的時候生成問

    scrapy crawl 爬蟲名字 -o 檔名
  • 2、方法二、在管道中利用檔案的寫入方式

    • 1、管道的程式碼

      import json
      # quotes爬取的資料寫到本地
      class QuotesPipelines(object):
      def process_item(self, item, spider):
      if spider.name == 'quotes':
      with open('quotes_test.json', 'a', encoding='utf-8') as fp:
      fp.write(json.dumps(dict(item), indent=2, ensure_ascii=False)  ',\n')
      return item
    • 2、在settings.py中配置
    • 3、直接執行scrapy crawl quotes --nolog

三、將抓取的資料存入到mongodb資料庫中

  • 1、安裝包

    pip install pymongo
  • 2、在settings.py中配置資料庫的連結資訊

    
    # 設定資料庫連線
    MONGO_URI = 'localhost'
    MONGO_DATABASE = 'test'
  • 3、在管道中寫業務邏輯

    import pymongo
    class MongoPipeline(object):
    """
    定義一個存入到資料庫中的類
    """
    collection_name = 'scrapy_items'
    def __init__(self, mongo_uri, mongo_db):
    self.mongo_uri = mongo_uri
    self.mongo_db = mongo_db
    @classmethod
    def from_crawler(cls, crawler):
    return cls(
    mongo_uri=crawler.settings.get('MONGO_URI'),
    mongo_db=crawler.settings.get('MONGO_DATABASE', 'items')
    )
    def open_spider(self, spider):
    self.client = pymongo.MongoClient(self.mongo_uri)
    self.db = self.client[self.mongo_db]
    def close_spider(self, spider):
    self.client.close()
    def process_item(self, item, spider):
    if spider.name == 'quotes':
    self.db[self.collection_name].insert_one(dict(item))
    return item
  • 4、在settings.py中配置管道

  • 5、直接執行scrapy crawl quotes --nolog

四、將爬取的資料存入到mysql資料庫中

  • 1、安裝包

    pip install pymysql
  • 2、在資料庫中建立表(區別於mongodb)

  • 3、在settings.py中配置mysql連線資訊

    
    # Mysql資料庫的配置資訊
    MYSQL_HOST = 'localhost'
    MYSQL_DBNAME = 'nodejs'  # 資料庫名字,請修改
    MYSQL_USER = 'root'  # 資料庫賬號,請修改
    MYSQL_PASSWD = 'root'  # 資料庫密碼,請修改
    MYSQL_PORT = 3306  # 資料庫埠,在dbhelper中使用
  • 4、使用管道存入資料庫中

    import pymysql
    # 西刺代理的資料入庫
    class XiciPipeline(object):
    def __init__(self, dbparams):
    self.connect = pymysql.connect(
    host=dbparams['host'],
    port=dbparams['port'],
    db=dbparams['db'],
    user=dbparams['user'],
    passwd=dbparams['passwd'],
    charset=dbparams['charset'],
    use_unicode=dbparams['use_unicode']
    )
    # 建立一個控制代碼
    self.cursor = self.connect.cursor()
    @classmethod
    def from_crawler(cls, crawler):
    # 讀取settings中的配置
    dbparams = dict(
    host=crawler.settings.get('MYSQL_HOST'),
    db=crawler.settings.get('MYSQL_DBNAME'),
    user=crawler.settings.get('MYSQL_USER'),
    passwd=crawler.settings.get('MYSQL_PASSWD'),
    port=crawler.settings.get('MYSQL_POR'),
    charset='utf8',  # 編碼要加上,否則可能出現中文亂碼問題
    use_unicode=False,
    )
    return cls(dbparams)
    def process_item(self, item, spider):
    if spider.name == 'xici':
    sql = 'insert into xici(ip, port, speed, proxy_type, localhost) values (%s, %s, %s, %s,%s)'
    self.cursor.execute(sql, (item['ip'], item['port'], item['speed'], item['proxy_type'], item['localhost']))
    self.connect.commit()
    return item
    def close_spider(self, spider):
    self.connect.close()
  • 5、在settings.py中配置管道

  • 6、直接執行scrapy crawl quotes --nolog