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也是解析网页得到的。
函数
1、response就是整个scrapy框架中,控制中心将请求发送给下载器,下载器下载了整个网页后,由控制中心将结果(Response)回送给spider解析,(spider解析网页的功能就在这里体现)。当然,在Response这个结果中,可以解析出我们需要再访问的url,然后继续发送URL请求,可以通过Request请求完成。
2、在parse中,我们只要解析出我们需要的数据,然后yield item ,就可以得到我们的数据,至于数据格式就看你们item的定义,数据存成哪种编码,哪个文件,就看pipeline。
3、然后把response中包含你想继续访问的URL解析出来,发送请求,至于调度器如何调度,下载器下载,调度器再把结果返回等一系列过程,就无需我们干预,这就是框架的作用,我们只要填函数就可以了。
iitem :定义每条记录的字段
pipeline:定义结果存在哪里,存成哪种编码
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
相关文章推荐
- NYOJ 71 独木舟上的旅行 (贪心)
- 【日记】2015-08-19
- eclipse调试(转)
- Java基础——反射(待续)
- elasticsearch安装
- Verilog HDL之于FPGA--阻塞与非阻塞赋值
- struts2传递对象
- http 和 Tcp 的区别
- HDOJ 5396 Expression DP
- java之 ------ 设计思想
- 【Powershell】【计数器】实时获取邮箱服务器的队列
- ajax提交整个form表单
- 基础理解部分
- Android SDK Android NDK Android Studio 官方下载地址
- hdu 5400 Arithmetic Sequence
- Twig中文说明手册
- Android SDK Android NDK Android Studio 官方下载地址
- 基于核方法的模糊C均值聚类
- 2015 Multi-University Training Contest 9 1005
- 用 GNOME Boxes 下载一个操作系统镜像