爬虫之scrapy高级部分等相关内容-138
#1 是否遵循爬虫协议
ROBOTSTXT_OBEY = False
#2 浏览器类型(默认写的是scrapy,)
USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36'
#3 日志级别(默认是info,执行爬虫,info会被打印出来)
# 设置成ERROR,只打印错误信息(提高爬虫效率)
LOG_LEVEL='ERROR'
2 scrapy持久化
1 scrapy crawl cnblogs -o cnblogs.json (这个不需要记)
1 在items中写类,类中写字段
class CnblogsSpiderItem(scrapy.Item):
title = scrapy.Field()
desc=scrapy.Field()
url=scrapy.Field()
author=scrapy.Field()
# 重点(文章详情,如果跟之前爬过的文章对应)
content=scrapy.Field()
2 在爬虫中把要保存的字段放到item对象中
article_item['url']=url
article_item['title']=title
article_item['desc']=desc
article_item['author']=author
yield article_item
3 在控制台输入:scrapy crawl cnblogs -o cnblogs.json
2 常用方式,只记住这一种
1 在items中写类,类中写字段
class CnblogsSpiderItem(scrapy.Item):
title = scrapy.Field()
desc=scrapy.Field()
url=scrapy.Field()
author=scrapy.Field()
# 重点(文章详情,如果跟之前爬过的文章对应)
content=scrapy.Field()
2 在爬虫中把要保存的字段放到item对象中
article_item['url']=url
article_item['title']=title
article_item['desc']=desc
article_item['author']=author
yield article_item
3 在setting中配置
ITEM_PIPELINES = {
'cnblogs_spider.pipelines.CnblogsSpiderFilePipeline': 300, # 数字表示优先级,数字越小,优先级越大
'cnblogs_spider.pipelines.CnblogsSpiderMysqlPipeline': 400, # 数字表示优先级,数字越小,优先级越大
}
4 在pipline中写
class CnblogsSpiderFilePipeline:
# 爬虫启动他会执行
def open_spider(self,spider):
# spider是爬虫对象
print(spider.name)
print('爬虫开始了')
self.f=open('cnblogs.txt','w',encoding='utf-8')
def close_spider(self,spider):
# 爬虫停止会执行
print('爬虫停止了')
self.f.close()
def process_item(self, item, spider):
self.f.write(item['title']+item['desc']+item['author']+item['url'])
self.f.write('/n')
return item
import pymysql
class CnblogsSpiderMysqlPipeline:
def open_spider(self,spider):
self.conn=pymysql.connect(