您的位置:首页 > 编程语言 > Python开发

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

2017-03-22 10:55 981 查看
注意:本文不是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      具体请下载源码自行看注释    

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

如有不足,还望指出
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐