时间:2021-07-01 10:21:17 帮助过:21人阅读
items.py文件
import scrapy class FirstbloodItem(scrapy.Item): # define the fields for your item here like: # name = scrapy.Field() author = scrapy.Field() content = scrapy.Field() pass
pipeline文件
import pymysql class FirstbloodPipeline(object): # 构造方法 def __init__(self): self.fp = None # 定义一个文件描述符属性 # 下列都是在重写父类的方法: # 开始爬虫时,执行一次 def open_spider(self, spider): print(‘爬虫开始‘) self.fp = open(‘./data.txt‘, ‘w‘,encoding=‘utf-8‘) # 专门处理item对象 # 因为该方法会被执行调用多次,所以文件的开启和关闭操作写在了另外两个只会各自执行一次的方法中。 def process_item(self, item, spider): author = item[‘author‘] content = item[‘content‘] contents = ‘{}:{}\n\n‘.format(author,content) self.fp.write(contents) return item # 传递到下一个被执行的管道类 def close_spider(self, spider): print(‘爬虫结束‘) self.fp.close() #管道文件中的一个管道类对应的是讲数据存储到一种平台 #爬虫文件提交的item只会给管道文件中第一个被执行的管道类接受 #process_item的return item表示item传递到下一个被执行的管道类 #将数据存储到数据库 class mysqlPipeline(object): # 构造方法 def __init__(self): self.conn = None # 定义一个文件描述符属性 self.cursor = None self.num = 0 # 下列都是在重写父类的方法: # 开始爬虫时,执行一次 def open_spider(self, spider): self.conn = pymysql.Connect(host=‘192.168.31.xx‘,port=3306,user=‘root‘,password=‘111‘,db=‘xxx_db‘,charset=‘utf8‘) print(‘爬虫数据库开始‘) # 专门处理item对象 # 因为该方法会被执行调用多次,所以文件的开启和关闭操作写在了另外两个只会各自执行一次的方法中。 def process_item(self, item, spider): author = item[‘author‘] content = item[‘content‘] self.cursor = self.conn.cursor() try: self.cursor.execute(‘insert into qiubai values(%s,%s)‘ ,(author,content)) self.conn.commit() except Exception as e: print(e) self.conn.rollback() return item def close_spider(self, spider): print(‘爬虫数据库结束‘) self.cursor.close() self.conn.close()
setting
USER_AGENT = ‘Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36‘ # 伪装请求载体身份 # Obey robots.txt rules # ROBOTSTXT_OBEY = True ROBOTSTXT_OBEY = False #可以忽略或者不遵守robots协议 #只显示指定类型的日志信息 LOG_LEVEL=‘ERROR‘ # Configure maximum concurrent requests performed by Scrapy (default: 16) #CONCURRENT_REQUESTS = 32 # Configure item pipelines # See https://doc.scrapy.org/en/latest/topics/item-pipeline.html ITEM_PIPELINES = { ‘firstBlood.pipelines.FirstbloodPipeline‘: 300, ‘firstBlood.pipelines.mysqlPipeline‘: 320, #300表示优先级,越小越高 }
Scrapy爬取全站数据并存储到数据库和文件中
标签:文件 字节 开启 设置 user 项目 函数返回 ret 存储