您的位置:首页 > 其它

Scrapy爬虫框架入门

2015-08-20 00:07 393 查看
1、强烈推荐的Scrapy框架教程:http://blog.csdn.net/column/details/younghz-scrapy.html

2、框架说明:

2.1:






整理框架中,初学者只需要参与的就是Spiders和item Pipeline模块

各模块的作用:

Spider 模块:解析网页和发送url请求。

Item模块:定义保存数据的格式,以字典存储,可以定义N个字段

Pipeline模块:定义解析后的数据写到文件中

下面具体例子进行说明:

代码是借用博客: http://blog.csdn.net/u012150179/article/details/34486677
Spider模块中,我们必须要解析数据,和发送新的URL请求,当然,新的URL也是解析网页得到的。

#!/usr/bin/python
# -*- coding:utf-8 -*-

# from scrapy.contrib.spiders import  CrawlSpider,Rule

from scrapy.spider import Spider
from scrapy.http import Request
from scrapy.selector import Selector
from CSDNBlog.items import CsdnblogItem

class CSDNBlogSpider(Spider):
"""爬虫CSDNBlogSpider"""

name = "CSDNBlog"

#减慢爬取速度 为1s
download_delay = 1
allowed_domains = ["blog.csdn.net"]
start_urls = [

#第一篇文章地址
"http://blog.csdn.net/u012150179/article/details/11749017"
]

def parse(self, response):
sel = Selector(response)

#items = []
#获得文章url和标题
item = CsdnblogItem()

article_url = str(response.url)
article_name = sel.xpath('//div[@id="article_details"]/div/h1/span/a/text()').extract()

item['article_name'] = [n.encode('utf-8') for n in article_name]
item['article_url'] = article_url.encode('utf-8')

yield item

#获得下一篇文章的url
urls = sel.xpath('//li[@class="next_article"]/a/@href').extract()
for url in urls:
print url
url = "http://blog.csdn.net" + url
print url
yield Request(url, callback=self.parse)


函数
def parse(self, response)


1、response就是整个scrapy框架中,控制中心将请求发送给下载器,下载器下载了整个网页后,由控制中心将结果(Response)回送给spider解析,(spider解析网页的功能就在这里体现)。当然,在Response这个结果中,可以解析出我们需要再访问的url,然后继续发送URL请求,可以通过Request请求完成。

2、在parse中,我们只要解析出我们需要的数据,然后yield item ,就可以得到我们的数据,至于数据格式就看你们item的定义,数据存成哪种编码,哪个文件,就看pipeline。

3、然后把response中包含你想继续访问的URL解析出来,发送请求,至于调度器如何调度,下载器下载,调度器再把结果返回等一系列过程,就无需我们干预,这就是框架的作用,我们只要填函数就可以了。

iitem :定义每条记录的字段

# -*- coding:utf-8 -*-

from scrapy.item import Item, Field

class CsdnblogItem(Item):
"""存储提取信息数据结构"""
article_name = Field()
article_url = Field()


pipeline:定义结果存在哪里,存成哪种编码

import json
import codecs

class CsdnblogPipeline(object):

def __init__(self):
self.file = codecs.open('CSDNBlog_data.json', mode='wb', encoding='utf-8')

def process_item(self, item, spider):
line = json.dumps(dict(item)) + '\n'
self.file.write(line.decode("unicode_escape"))

return item
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: