摘要:根据Excel文件配置运行多个爬虫

很多时候,我们都需要为每一个单独的网站编写一个爬虫,但有一些情况是你要爬取的几个网站的唯一不同之处在于Xpath表达式不同,此时要分别为每一个网站编写一个爬虫就显得徒劳了,其实可以只使用一个spider就爬取这些相似的网站。

首先创建一个名为generic的工程和一个名为fromcsv的spider:

scrapy startproject generic
cd generic
scrapy genspider fromcsv example.com

然后创建一个csv文件,在文件中填充以下信息:

使用Python的csv库来验证一下

$ python
>>> import csv
>>> with open("todo.csv", "rU") as f:
reader = csv.DictReader(f)
for line in reader:
print line

输出如下:

注意:todo.csv文件的第一行会自动作为字典的key

现在读取todo.csv文件中的URL和Xpath表达式来运行spider,由于我们并不能提前知道URL,所以要从spider中移除start_urls和allowed_domains部分,使用start_requests()方法,对于csv文件中的每一行都产生一个Request对象,并且将字段名和Xpath表达式放入参数request.mate中,传递到parse函数,然后永Item和ItemLoader来填充item的字段

import csv
import scrapy
from scrapy.http import Request
from scrapy.loader import ItemLoader
from scrapy.item import Item, Field
class FromcsvSpider(scrapy.Spider):
name = "fromcsv"
def start_requests(self):
with open("todo.csv", "rU") as f:
reader = csv.DictReader(f)
for line in reader:
request = Request(line.pop('url')) #从字典中弹出了key为url的元素
request.meta['fields'] = line
yield request
def parse(self, response):
item = Item() # 在本工程中并没有定义items.py文件
l = ItemLoader(item=item, response=response)
for name, xpath in response.meta['fields'].iteritems():
if xpath:
item.fields[name] = Field() # 动态创建一个item
l.add_xpath(name, xpath)
return l.load_item()

fromcsv.py源文件代码地址:

https://github.com/Kylinlin/scrapybook/blob/master/ch05%2Fgeneric%2Fgeneric%2Fspiders%2Ffromcsv.py

运行spider:scrapy crawl fromcsv

由于上面的源码中硬编码了todo.csv文件名,一旦文件名发生了变动就需要修改源代码,这并不是一个好的设计,其实Scrapy使用了一个简便的方式(使用 -a)可以从命令行向spider传送参数,例如:-a variable=value,那么spider就可以在源代码中的self.variable来获取value。为了检查变量名并提供默认值,就使用Python的方法getarrt(self, ‘variable’, ‘default’),所以上面的with语句可以修改为:

with open(getarrt(self, “file”, “todo.csv”), “rU”) as f:

然后在运行spider时通过-a参数来指定csv文件(如果没有使用-a参数,就默认使用todo.csv文件):

scrapy crawl fromcsv –a file=todo.csv

Learning Scrapy笔记(七)- Scrapy根据Excel文件运行多个爬虫的更多相关文章

  1. Scrapy笔记09- 部署

    Scrapy笔记09- 部署 本篇主要介绍两种部署爬虫的方案.如果仅仅在开发调试的时候在本地部署跑起来是很容易的,不过要是生产环境,爬虫任务量大,并且持续时间长,那么还是建议使用专业的部署方法.主要是 ...

  2. 记录python接口自动化测试--把测试结果写进excel文件(第九目)

    python中一般使用xlrd(excel read)来读取Excel文件,使用xlwt(excel write)来生成Excel文件(可以控制Excel中单元格的格式),需要注意的是,用xlrd读取 ...

  3. Python:将爬取的网页数据写入Excel文件中

    Python:将爬取的网页数据写入Excel文件中 通过网络爬虫爬取信息后,我们一般是将内容存入txt文件或者数据库中,也可以写入Excel文件中,这里介绍关于使用Excel文件保存爬取到的网页数据的 ...

  4. Learning Scrapy笔记(六)- Scrapy处理JSON API和AJAX页面

    摘要:介绍了使用Scrapy处理JSON API和AJAX页面的方法 有时候,你会发现你要爬取的页面并不存在HTML源码,譬如,在浏览器打开http://localhost:9312/static/, ...

  5. Learning Scrapy笔记(零) - 前言

    我已经使用了scrapy有半年之多,但是却一直都感觉没有入门,网上关于scrapy的文章简直少得可怜,而官网上的文档(http://doc.scrapy.org/en/1.0/index.html)对 ...

  6. Learning Scrapy笔记(三)- Scrapy基础

    摘要:本文介绍了Scrapy的基础爬取流程,也是最重要的部分 Scrapy的爬取流程 Scrapy的爬取流程可以概括为一个方程式:UR2IM,其含义如下图所示 URL:Scrapy的运行就从那个你想要 ...

  7. Scrapy:学习笔记(2)——Scrapy项目

    Scrapy:学习笔记(2)——Scrapy项目 1.创建项目 创建一个Scrapy项目,并将其命名为“demo” scrapy startproject demo cd demo 稍等片刻后,Scr ...

  8. scrapy笔记集合

    细读http://scrapy-chs.readthedocs.io/zh_CN/latest/index.html 目录 Scrapy介绍 安装 基本命令 项目结构以及爬虫应用介绍 简单使用示例 选 ...

  9. Scrapy 笔记(二)

    一个scrapy爬虫知乎项目的笔记 1.通过命令创建项目 scrapy startproject zhihucd zhihuscrapy genspider zhihu www.zhihu.com(临 ...

随机推荐

  1. 程序员必备:Oracle日常维护命令

        上一篇讲了Linux的日常维护命令,这篇讲讲Oracle的日常维护命令.工作中需要使用Oracle数据库的童鞋们,相信或多或少都需要对Oracle做一些基本的维护操作,例如导入导出总该有吧?( ...

  2. CS中调用微软自带com组件实现音频视频播放(wf/wpf)

    1.mp3播放器:工具箱中右键,在弹出的菜单中选择“选择项”,添加“com组件”,选择名称“windows Media Player",点击确定就会在工具箱新增一个“windows Medi ...

  3. windows 测试数据库的连接状况-udl方法

    udl是windows系统上,用于测试数据库的连接状态的测试软件. 使用方法: 1.建立一个空白文本 2.将文件的后缀名更改为*.udl 即可     文件内容一定为空 3.选择windows的“提供 ...

  4. JAVA集合学习

    JAVA中有几种常用的集合类.分别是List,Set,Map等 提示:Eclipse中自动导入包的快捷键  Ctrl+Shift+O 一.List类 父接口:该类是Collection集合接口的子接口 ...

  5. 使用virtualbox安装centos虚拟机,以及VirtualBox无法安装64位Linux CentOS的解决办法

    之前一直用vmware的虚拟机,好吧,其实一直盗版挺不好的,然后想用centos搭点东西,结果在vmare上安装centos总是有些问题,看了人给的建议换用virtualbox,虽然virtualbo ...

  6. 怎样对CODESOFT中的条形码进行黑白转换

      CODESOFT 2015标签设计软件能 够提供无与伦比的灵活性.功能和支持,其面对的用户也是极其的广泛.对于一些需要打印黑白反转条形码的特殊用户,例如使用黑色标签纸的用 户,CODESOFT 2 ...

  7. 利用Meida Service的Java SDK来调用Azure Media Services的Index V2实现视频字幕自动识别

    Azure Media Services新的Index V2 支持自动将视频文件中的语音自动识别成字幕文件WebVtt,非常方便的就可以跟Azure Media Player集成,将一个原来没字幕的视 ...

  8. No.006 ZigZag Conversion

    6. ZigZag Conversion Total Accepted: 98584 Total Submissions: 398018 Difficulty: Easy The string &qu ...

  9. onclicklistener到底怎么用?

    转载地址:http://blog.csdn.net/dickren123/article/details/7216975 相信很多像我一样的新手学习Android开发会遇到这个问题,通过这几天的归类和 ...

  10. 关于oracle中传过来的一个多id需要插入到数据库用,分格的存储过程

    create or replace procedure test ( jf_Id in nvarchar2, yf_id in nvarchar2 ) as v_length NUMBER := LE ...