云南做网站找谁,做泌尿科网站价格,龙岗大运做网站的公司,定制模板Scrapy是一个为了爬取网站数据#xff0c;提取结构性数据而编写的应用框架。 其可以应用在数据挖掘#xff0c;信息处理或存储历史数据等一系列的程序中。其最初是为了页面抓取 (更确切来说, 网络抓取 )所设计的#xff0c; 也可以应用在获取API所返回的数据(例如 Amazon As…Scrapy是一个为了爬取网站数据提取结构性数据而编写的应用框架。 其可以应用在数据挖掘信息处理或存储历史数据等一系列的程序中。其最初是为了页面抓取 (更确切来说, 网络抓取 )所设计的 也可以应用在获取API所返回的数据(例如 Amazon Associates Web Services ) 或者通用的网络爬虫。Scrapy用途广泛可以用于数据挖掘、监测和自动化测试。
Scrapy 使用了 Twisted异步网络库来处理网络通讯。整体架构大致如下 Scrapy主要包括了以下组件 引擎(Scrapy)用来处理整个系统的数据流, 触发事务(框架核心)调度器(Scheduler)用来接受引擎发过来的请求, 压入队列中, 并在引擎再次请求的时候返回. 可以想像成一个URL抓取网页的网址或者说是链接的优先队列, 由它来决定下一个要抓取的网址是什么, 同时去除重复的网址下载器(Downloader)用于下载网页内容, 并将网页内容返回给蜘蛛(Scrapy下载器是建立在twisted这个高效的异步模型上的)爬虫(Spiders)爬虫是主要干活的, 用于从特定的网页中提取自己需要的信息, 即所谓的实体(Item)。用户也可以从中提取出链接,让Scrapy继续抓取下一个页面项目管道(Pipeline)负责处理爬虫从网页中抽取的实体主要的功能是持久化实体、验证实体的有效性、清除不需要的信息。当页面被爬虫解析后将被发送到项目管道并经过几个特定的次序处理数据。下载器中间件(Downloader Middlewares)位于Scrapy引擎和下载器之间的框架主要是处理Scrapy引擎与下载器之间的请求及响应。爬虫中间件(Spider Middlewares)介于Scrapy引擎和爬虫之间的框架主要工作是处理蜘蛛的响应输入和请求输出。调度中间件(Scheduler Middewares)介于Scrapy引擎和调度之间的中间件从Scrapy引擎发送到调度的请求和响应。
Scrapy运行流程大概如下
引擎从调度器中取出一个链接(URL)用于接下来的抓取引擎把URL封装成一个请求(Request)传给下载器下载器把资源下载下来并封装成应答包(Response)爬虫解析Response解析出实体Item,则交给实体管道进行进一步的处理解析出的是链接URL,则把URL交给调度器等待抓取 一、安装 1、安装wheelpip install wheel2、安装lxmlhttps://pypi.python.org/pypi/lxml/4.1.03、安装pyopensslhttps://pypi.python.org/pypi/pyOpenSSL/17.5.04、安装Twistedhttps://www.lfd.uci.edu/~gohlke/pythonlibs/5、安装pywin32https://sourceforge.net/projects/pywin32/files/6、安装scrapypip install scrapy
注windows平台需要依赖pywin32请根据自己系统32/64位选择下载安装https://sourceforge.net/projects/pywin32/
二、爬虫举例
入门篇美剧天堂前100最新http://www.meijutt.com/new100.html
1、创建工程
scrapy startproject movie
2、创建爬虫程序
cd movie
scrapy genspider meiju meijutt.com
3、自动创建目录及文件 4、文件说明
scrapy.cfg 项目的配置信息主要为Scrapy命令行工具提供一个基础的配置信息。真正爬虫相关的配置信息在settings.py文件中items.py 设置数据存储模板用于结构化数据如Django的Modelpipelines 数据处理行为如一般结构化的数据持久化settings.py 配置文件如递归的层数、并发数延迟下载等spiders 爬虫目录如创建文件编写爬虫规则
注意一般创建爬虫文件时以网站域名命名
5、设置数据存储模板 items.py
import scrapyclass MovieItem(scrapy.Item):# define the fields for your item here like:# name scrapy.Field()name scrapy.Field()
6、编写爬虫 meiju.py
# -*- coding: utf-8 -*-import scrapy
from movie.items import MovieItemclass MeijuSpider(scrapy.Spider):name meijuallowed_domains [meijutt.com]start_urls [http://www.meijutt.com/new100.html]def parse(self, response):movies response.xpath(//ul[classtop-list fn-clear]/li)for each_movie in movies:item MovieItem()item[name] each_movie.xpath(./h5/a/title).extract()[0]yield item
7、设置配置文件 settings.py增加如下内容
ITEM_PIPELINES {movie.pipelines.MoviePipeline:100}
8、编写数据处理脚本 pipelines.py
class MoviePipeline(object):def process_item(self, item, spider):with open(my_meiju.txt,a) as fp:fp.write(item[name].encode(utf8) \n)
9、执行爬虫
cd movie
scrapy crawl meiju --nolog
10、结果 进阶篇爬取校花网http://www.xiaohuar.com/list-1-1.html
1、创建一个工程
scrapy startproject xhspider
2、创建爬虫程序
cd pic
scrapy genspider xh xiaohuar.com
3、自动创建目录及文件 4、文件说明
scrapy.cfg 项目的配置信息主要为Scrapy命令行工具提供一个基础的配置信息。真正爬虫相关的配置信息在settings.py文件中items.py 设置数据存储模板用于结构化数据如Django的Modelpipelines 数据处理行为如一般结构化的数据持久化settings.py 配置文件如递归的层数、并发数延迟下载等spiders 爬虫目录如创建文件编写爬虫规则
注意一般创建爬虫文件时以网站域名命名
5、设置数据存储模板
# -*- coding: utf-8 -*-# Define here the models for your scraped items
#
# See documentation in:
# https://doc.scrapy.org/en/latest/topics/items.htmlimport scrapyclass XhspiderItem(scrapy.Item):# define the fields for your item here like:# name scrapy.Field()addr scrapy.Field()name scrapy.Field()pass6、编写爬虫
# -*- coding: utf-8 -*-
import scrapy
import os# 导入item中结构化数据模板
from xhspider.items import XhspiderItemclass XhSpider(scrapy.Spider):# 爬虫名称唯一name xh# 允许访问的域allowed_domains [xiaohuar.com]# 初始URLstart_urls [http://www.xiaohuar.com/list-1-1.html]def parse(self, response):# 获取所有图片的a标签allPics response.xpath(//div[classimg]/a)for pic in allPics:# 分别处理每个图片取出名称及地址item XhspiderItem()name pic.xpath(./img/alt).extract()[0]addr pic.xpath(./img/src).extract()[0]if addr.startswith(/d/file/):addr http://www.xiaohuar.com addritem[name] nameitem[addr] addr# 返回爬取到的数据yield item7、设置配置文件
# 设置处理返回数据的类及执行优先级
ITEM_PIPELINES {xhspider.pipelines.XhspiderPipeline: 300,
}
8、编写数据处理脚本
# -*- coding: utf-8 -*-# Define your item pipelines here
#
# Dont forget to add your pipeline to the ITEM_PIPELINES setting
# See: https://doc.scrapy.org/en/latest/topics/item-pipeline.htmlimport urllib
import urllib.request
import os
import socket
import sslclass XhspiderPipeline(object):def process_item(self, item, spider):headers {User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0}print(item[addr])ctx ssl._create_unverified_context()req urllib.request.Request(urlitem[addr], headersheaders)res urllib.request.urlopen(req,contextctx)file_name os.path.join(./allpic, item[name] .jpg)with open(file_name, wb) as f:f.write(res.read())return item9、执行爬虫
cd pic
scrapy crawl xh --nolog
结果 终极篇我想要所有校花图
注明基于进阶篇再修改为终极篇
# xh.py
# -*- coding: utf-8 -*-
import scrapy
from xhspider.items import XhspiderItemclass AllxhSpider(scrapy.Spider):# 爬虫名称唯一name allxh# 允许访问的域allowed_domains [xiaohuar.com]# 初始URLstart_urls [http://www.xiaohuar.com/hua/]# 设置一个空集合url_set set()def parse(self, response):# 如果图片地址以http://www.xiaohuar.com/list-开头我才取其名字及地址信息if response.url.startswith(http://www.xiaohuar.com/list-):allPics response.xpath(//div[classimg]/a)for pic in allPics:# 分别处理每个图片取出名称及地址item XhspiderItem()name pic.xpath(./img/alt).extract()[0]addr pic.xpath(./img/src).extract()[0]if addr.startswith(/d/file/):addr http://www.xiaohuar.com addritem[name] nameitem[addr] addr# 返回爬取到的信息yield item# 获取所有的地址链接urls response.xpath(//a/href).extract()for url in urls:# 如果地址以http://www.xiaohuar.com/list-开头且不在集合中则获取其信息if url.startswith(http://www.xiaohuar.com/list-):if url in AllxhSpider.url_set:passelse:AllxhSpider.url_set.add(url)# 回调函数默认为parse,也可以通过from scrapy.http import Request来指定回调函数# from scrapy.http import Request# Request(url,callbackself.parse)yield self.make_requests_from_url(url)else:pass