首页 > 编程知识 正文

scrapy大型爬虫(爬虫scrapy流程)

时间:2023-05-06 02:48:46 阅读:90262 作者:4539

目录

前言Media Pipeline启用Media Pipeline,使用ImgPipeline抓住妹妹的照片瞎了眼,送完书后,前言发送语言

在我们捕获数据的过程中,不仅需要捕获文本数据,还需要捕获图像。 那我们的scrapy能取图像吗? 答案当然是。 不好意思,我上个月也知道了,zone7的粉丝团体中有一个团体问scrapy是怎么获取图像数据的。 之后试着搜索了一下才知道。 一起分享吧。

媒体流水线

我们的itempipeline处理可以处理文字信息,还可以存储文件和图像数据。 分别是“FilesPipeline”和“ImagesPipeline”

菲尔斯流水线

指定存储路径而不重新下载最近下载的数据的FilesPipeline的典型工作流程如下:

在爬虫中,抓住项目,将其中图片的URL放入file_urls组中。 项目从爬虫返回,进入项目管道。 项目进入FilesPipeline后,file_urls组中的URLs将被Scrapy的调度程序和下载程序(即意味着调度程序和下载程序的中间件可以复用)下载在文件下载完成之前,或者在由于某种原因未完成下载之前,项目将一直处于“锁定器”的特定管线阶段。 文件下载后,另一个字段“files”将更新为结构。 该组包含一个词典列表,其中包含有关下载文件的信息,如下载路径、从file_urls组获取的源捕获地址和图像校验码(checksum )。 文件列表中的文件顺序与源文件_ URLs组匹配。 如果图像下载失败,将记录错误消息,并且图像不会显示在文件组中。 影像管道

请勿重新下载最近下载的数据。 指定保存路径,将所有下载的图像转换为通用格式(JPG )和模式(RGB )的缩略图,以检测图像的宽度/高度,并确保满足最小限制并启用媒体绘制

# #同时启用图像和文件管道

ITEM_PIPELINES={ #使用时,请修改为自己的ImgPipeline

' girls crapy.pipelines.img pipeline ' :1,

}

文件存储=操作系统. getcwd '/girls crapy /文件' #文件存储路径

images _ store=操作系统. getcwd ()/girlScrapy/img' # ) #图像存储路径

# #请不要下载最近90天下载的文件内容

FILES_EXPIRES=90

# #避免下载最近90天下载的图像内容

IMAGES_EXPIRES=30

# #图像缩略图的设定

IMAGES_THUMBS={

'小型' : (50,50 )、

big ' : (250,250 )、

}

# #图像滤波器、最小高度和宽度、此大小以下不下载

IMAGES_MIN_HEIGHT=128

IMAGES_MIN_WIDTH=128

另外,下载的图像名称最终会带有图像URL的哈希值。 示例:

0 BD DEA 29939贝卡7 AD1E 4160 BBB4EC 2238 ACBD9. JPG

最终保存地点如下

your/img /路径/完全/0BD Dea 29939贝卡7 AD1e 4160 BBB4EC 2238 ACCBD9. JPG

使用img管线

这是我的demo里的一个ImgPipeline,里面重写了两个方法。

froms crapy.pipelines.imagesimportimagespipeline

classimgpipeline (图像管线) :#继承名为imagespipeline的类

defget _ media _ requests (自、项目、信息) :

for image _ urlin item [ ' image _ URLs ' ] :

image _ URL=图像URL

yeldscrapy.request (图像_ URL ) )。

ef item _ completed (自、结果、项目、信息) :

image _ paths=“为我的路径好,为我的结果好”

if not图像路径:

raisedropitem (国际货币联盟) )。

返回项目

每一个:

获取媒体请求(自、项目、信息) :

item _ completed (自、结果、项目、信息) :

获取媒体请求(自、项目、信息) :

在这里,我们可以取得用parse解析的item值,所以我们可以

可以获取到相应的图片地址。在这里返回一个 scrapy.Request(image_url) 去下载图片。

item_completed(self, results, item, info):

item 和 info 打印出来都是 url 地址列表。其中 results 打印出来是如下值。

# 成功 [(True, {'path': 'full/0bddea29939becd7ad1e4160bbb4ec2238accbd9.jpg', 'checksum': '98eb559631127d7611b499dfed0b6406', 'url': 'http://mm.chinasareview.com/wp-content/uploads/2017a/06/13/01.jpg'})] # 错误 [(False, Failure(...))]

抓取妹子图

ok,理论部分也讲完了,那我们来实践一下吧

spider

spider 部分很简单,如下:

class GirlSpider(scrapy.spiders.Spider): name = 'girl' start_urls = ["http://www.meizitu.com/a/3741.html"] def parse(self, response): soup = BeautifulSoup(response.body, 'html5lib') pic_list = soup.find('div', id="picture").find_all('img') # 找到界面所有图片 link_list = [] item = ImgItem() for i in pic_list: pic_link = i.get('src') # 拿到图片的具体 url link_list.append(pic_link) # 提取图片链接 item['image_urls'] = link_list print(item) yield item

item

class ImgItem(scrapy.Item): image_urls = scrapy.Field()#图片的链接 images = scrapy.Field()

ImgPipeline

class ImgPipeline(ImagesPipeline):#继承 ImagesPipeline 这个类 def get_media_requests(self, item, info): for image_url in item['image_urls']: image_url = image_url yield scrapy.Request(image_url) def item_completed(self, results, item, info): image_paths = [x['path'] for ok, x in results if ok] if not image_paths: raise DropItem("Item contains no images") return item

启动

scrapy crawl girl

最终爬取结果如下:

删除了某些不适内容,哈哈哈

瞎比比与送书后话

今天的更新就到此结束啦,是不是 get 到了新技能?至于如何批量下载妹子图?这个,我相信妹子的颜值会驱使你完善这些代码,手动滑稽!!!最后,回复【妹子图】获取源码。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。