scrapy实战
本节主要讲述w3c项目的实际编码。
首先编辑items.py设置要抓取的数据,本项目是抓取页面中的名称,链接和描述三中数据。具体实现如下:
import scrapy
class W3CItem(scrapy.Item):
# define the fields for your item here like:
title =scrapy.Field()
link=scrapy.Field()
desc=scrapy.Field()
然后编写w3cSpider.py,设置爬取页面的地址及爬取规则
import scrapy
from scrapy.selector import Selector
from w3c.items import W3CItem
class w3cSpider(scrapy.Spider):
name='w3c_spider'#爬虫名称,命令行运行时要用到
allowed_domains=['w3school.com.cn']
start_urls=[
"http://www.w3school.com.cn/xml/xml_syntax.asp" #爬取的页面地址
]
def parse(self, response):#scrapy根据爬取地址发送请求后调用parse进行数据提取
sel=Selector(response)
sites=sel.xpath('//div[@id="course"]/ul/li')#使用xpath提取页面信息
for site in sites:
item = W3CItem()
title = site.xpath('a/@title').extract()#提取title
link = site.xpath('a/@href').extract()#提取链接
desc=site.xpath('a/text()').extract()#提取描述
item['title']=title[0]#组织item数据
item['link']=link[0]
item['desc']=desc[0]
yield item #返回item数据给pipeline使用
本项目只需要将抓取的数据存储起来即可所以在pipelines.py中实现settings.py设置的W3CPipeline类即可。首先在settings.py中配置ItemPipeLine,代码如下
ITEM_PIPELINES = {
'w3c.pipelines.W3CPipeline': 300,
}
最后编写pipelines.py文件,对爬取的item进行处理
import json
import codecs
class W3CPipeline(object):
def __init__(self):
self.file=codecs.open('w3c.json','wb',encoding='utf-8')#打开文件
def process_item(self, item, spider):
line=json.dumps(item['title'],ensure_ascii=False)+'\t'
line = line+json.dumps(item['link'],ensure_ascii=False)+'\t'
line = line+json.dumps(item['desc'],ensure_ascii=False)+'\n'
self.file.write(line)#写入文件
编写完成后就可以运行了,在w3c项目的根目录中使用命令 scrapy crawl w3c_spider 就可以进行数据爬取啦。完整程序请参考文件夹中的w3c项目