python爬虫--scrapy 框架 之 项目外运行爬虫(用脚本运行爬虫)

注意:本文不是scrapy入门教程(未来也许会写一套教程  小白入门级的)   

传送门1:python 2.7 语法篇

传送门2:scrapy 官方文档1.3 

传送门3:XPath 教程


———————————————————

                                     用脚本的方式在项目外启动爬虫 

本文以爬取糗事百科上的段子并储存在mysql数据库 为例          项目源码下载 -->  GitHub

项目运行需要先安装的模块

->scrapy        

->pymysql

->twisted

->VCForPython27     这个不是python包  Windows系统需要安装  点击下载

PS: python安装模块   直接用   命令行    pip install  模块名    


目录结构:

spider-master

——Run

————qiushibaike

————qiushibaike

————...........

qiushibaike 文件夹是爬虫项目  

其他的就不罗嗦了   源码里我做了详细的注释        

下面只贴最主要的一段源码   Run.py         

#coding:utf-8
import threading
#在项目外用脚本启动爬虫 
from twisted.internet import reactor
from scrapy.crawler import CrawlerRunner
import qiushibaike.qiushibaike.items
from qiushibaike.qiushibaike.spiders.csbk import Csbk
from qiushibaike.qiushibaike.pipelines import QiushibaikePipeline
from scrapy.settings import Settings

#配置文件在这里手动实现 
#下面是官方说法  
#Running spiders outside projects it’s not much different. 
#You have to create a generic Settings object and populate it as needed (See 内置设定参考手册 for the available settings), 
#instead of using the configuration returned by get_project_settings. 
#翻译 
#运行蜘蛛外项目没有多少不同。
#你必须根据需要创建一个通用设置对象并填充它(见内置设定参考手册可用的设置),而不是使用配置由get_project_settings返回。
def run_csbk():
	settings = Settings({
		#Spiders can still be referenced by their name if SPIDER_MODULES is set with the modules where Scrapy should look for spiders.
		#Otherwise, passing the spider class as first argument in the CrawlerRunner.
		#翻译
		#蜘蛛仍然可以引用他们的名字如果SPIDER_MODULES设置模块,Scrapy应该找蜘蛛。
		#否则,将蜘蛛CrawlerRunner类作为第一个参数。
		'SPIDER_MODULES':['qiushibaike.qiushibaike.spiders.csbk'],  

		'ROBOTSTXT_OBEY':True,
		#设置包头
		'DEFAULT_REQUEST_HEADERS':{
		'Referer':'http://www.qiushibaike.com/text/',
	    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36'},
		#启用pipelines组件
		'ITEM_PIPELINES':{
	    'qiushibaike.qiushibaike.pipelines.QiushibaikePipeline': 400,},

	    'CONCURRENT_REQUESTS':1,     #同时只处理一个请求  
	    'DOWNLOAD_DELAY':2			#每个2秒 下载一个页面  
	    })
	runner=CrawlerRunner(settings)

	d=runner.crawl('Csbk')
	d.addBoth(lambda _: reactor.stop())
	reactor.run()
	return 0
#下面的代码仅共参考,实际上直接run_csbk() 也可以  
def thread_qiushi():
	print("--------------")
	threading.Thread(target=run_csbk())
if __name__ == '__main__':
	thread_qiushi()



提示:

一、上面的代码只是实现在项目外运行爬虫中的关键一步,另外还有一些细节,比如 爬虫文件(本项目 为 csbk.py 这个文件)导入的模块 路径要相对于Run.py      具体请下载源码自行看注释    

二、如果您并不懂怎么写一个爬虫,建议参考文章开头的传送门。当然,本项目内也有少部分注释解释如何写爬虫。



如有不足,还望指出






你可能感兴趣的:(框架,Python,爬虫,python,scrapy)