Scrapy,Python开发的一个快速,高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据。Scrapy用途广泛,可以用于数据挖掘、监测和自动化测试。
Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架。可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中。Scrapy可以说是目前Python爬虫框架中最成熟最稳定的框架之一,所以我们使用Scrapy框架来做爬虫开发可以说是好钢用在刀刃上。
一、Scrapy主要包括了以下组件:
Scrapy架构图二、Scrapy
1.Scrapy的五大模块:
*引擎(Scrapy):用来处理整个系统的数据流处理, 触发事务(框架核心)
*调度器(Scheduler):调度器接受引擎传来的数据,维护需要爬取的网页URL队列,并通过规定的调度机制将URL创建为下载请求。
*下载器(Downloader):用于下载网页内容, 并将网页内容返回给蜘蛛(Scrapy下载器是建立在twisted这个高效的异步模型上的)
*管道(Item Pipeline):将爬取到的内容转换为实体对象,并对实体对象做有效性验证、持久化等等自定义的操作。
*爬虫(Spiders):在爬虫中,定义爬取URL的规则和网页信息的提取规则。
2.基本流程
3.创建项目
工程目录
4.爬取伯乐在线IT标签的所有文章的信息
1、分析
网址:http://blog.jobbole.com/category/it-tech/
2、在items文件的类中创建所需字段
3、在spiders文件夹中创建一个scrapy.Spider的子类,并重写其中的name、start_urls、parse()
name = "list_spider"
start_urls = ["http://blog.jobbole.com/all-posts/"]
def parse(self, response):
result = dict()
print("++++++"*50)
container = response.xpath("//div[@class='post floated-thumb']")
curr_page = int(response.xpath("//span[@class='page-numbers current']/text()").extract_first())
# print(type(container))
list_index = 1
for item in container:
# print(item)
result["thumb_url"] = item.xpath("./div[@class='post-thumb']//img/@src").extract_first()
content_container = item.xpath(".//div[@class='post-meta']")
result["date"] = ""
date_b = content_container.xpath("./p/text()").extract()
match = re.findall("(\d{4}/\d{2}/\d{2})", str(date_b))
if len(match):
result["date"] = match[0]
result["title"] = content_container.xpath("./p/a[@class='archive-title']/text()").extract_first()
result["tag"] = content_container.xpath("./p/a[@rel]/text()").extract_first()
result["summary"] = content_container.xpath("./span[@class='excerpt']/p/text()").extract_first()
result["detail_url"] = content_container.xpath(".//span[@class='read-more']/a/@href").extract_first()
result["curr_index"] = (curr_page-1) * 20 + list_index
yield result
list_index += 1
next_page = response.xpath("//a[@class='next page-numbers']/@href").extract_first()
if next_page:
yield scrapy.Request(url=next_page, callback=self.parse)
提取标签信息用的是xpath,可以参考http://www.w3school.com.cn/xpath/index.asp
4、这时候所有数据都已经爬取到了,scrapy会将爬取到的数据输出到控制台
将数据存到数据库:
存到csv:
存到Excel:
三、Request介绍:
Request类是一个http请求的类,对于爬虫而言是一个很重要的类。通常在Spider中创建这样的一个请求,在Downloader中执行这样的一个请求。
同时也有一个子类FormRequest继承于它,用于post请求。
Spring中获取request的几种方法
方法1:Controller中加参数
代码示例:
该方法实现的原理是,在Controller方法开始处理请求时,Spring会将request对象赋值到方法参数中。Controller中获取request对象后,如果要在其他方法中(如service方法、工具类方法等)使用request对象,需要在调用这些方法时将request对象作为参数传入。
方法2:自动注入
代码示例:
方法3:基类中自动注入
与方法2相比,将注入部分代码放入到了基类中。
代码示例:
基类代码:
Controller代码如下;这里列举了BaseController的两个派生类,由于此时测试代码会有所不同,因此服务端测试代码没有省略;客户端也需要进行相应的修改(同时向2个url发送大量并发请求)。
方法4:手动调用
代码示例:
方法5:@ModelAttribute方法
下面这种方法及其变种(变种:将request和bindRequest放在子类中)在网上经常见到:
代码示例:
还有很多包括视频我就不一一截图了,需要这些资料的可以先关注小编,转发评论,私信小编 晓雯
网友评论