用scrapy抓取网站图片

news/2024/5/13 12:30:14/文章来源:https://blog.csdn.net/weixin_34049948/article/details/92212028

学习Python,就避免不了爬虫,而Scrapy就是最流行的一个。你可以爬取文字信息(如招聘职位信息,网站评论等),也可以爬取图片,比如看到一些好的网站展示了很多精美的图片(这里只用作个人学习Scrapy使用,不作商业用途),可以download下来。好了,不多说,现在开始一个最简单的图片爬虫。

首先,我们需要一个浏览器,方便查看html路径,这里推荐使用火狐开发者版(https://www.mozilla.org/en-US/firefox/developer/) 这个版本的火狐logo是蓝色的哦

装了这个,你不需要在去装firebug,firepath之类的插件

这里的例子,以花瓣网为例,抓取http://www.meisupic.com/topic.php 这个页面的图片。

Step 1: Open Firefox and access with above URL, navigate to Inspector tab, click arrow and then select a picture, you then can see the location of selected picture (see below)
用scrapy抓取网站图片

在这里我们发现,打开的页面包含了很多主题的图片,然后每个主题对应一个图片链接地址,打开之后,就是这个主题下面对应的图片。那我们的目的是抓取每一个主题下面的图片,所以,第一步要获取每个主题的链接,打开这个链接,在查看图片的地址,然后一个一个download。现在大概知道了我们这个例子有两层结构:①访问主页,展示的是不同主题的图片 ②打开每一个主题,展示的这个主题下面的图片

现在开始创建一个scrapy的工程(可以参考之前的文章https://blog.51cto.com/waytogo/2092238)

这里我创建了一个huaban2的project(之前有做另一个,所以这里命名为huaban2,想写什么名都可以),然后再创建一个spider,begin是一个command line的文件,里面是就scrapy crawl meipic的命令,一会再看
用scrapy抓取网站图片

Step 2: Implement a spider

# -*- coding: utf-8 -*-
from huaban2.items import Huaban2Item
import scrapyclass HuabanSpider(scrapy.Spider):name = 'meipic'allowed_domains = ['meisupic.com']baseURL = 'http://www.meisupic.com/topic.php'start_urls = [baseURL]def parse(self, response):node_list = response.xpath("//div[@class='body glide']/ul")if len(node_list) == 0:returnfor node in node_list:sub_node_list = node.xpath("./li/dl/a/@href").extract()if len(sub_node_list) == 0:returnfor url in sub_node_list:new_url = self.baseURL[:-9] + urlyield scrapy.Request(new_url, callback=self.parse2)def parse2(self, response):node_list = response.xpath("//div[@id='searchCon2']/ul")if len(node_list) == 0:returnitem = Huaban2Item()item["image_url"] = node_list.xpath("./li/a/img/@data-original").extract()yield item

解释一下这段代码:在用 scrapy genspider meipic meisupic.com 生成spider之后,默认的结构已经写好了,这里我们设置了一个baseURL, parse是默认的方法。从上面的分析中得知,我们需要拿到每一个主题的链接,所以用xpath定位

node_list = response.xpath("//div[@class='body glide']/ul")

这样我们得到一个selector对象,赋给变量node_list,加个if判断一下,如果没了就结束(return之后的代码都不会执行,这个大家应该都知道),接着我们要取/ul/li/dl下面的a中的href,取到之后,用extract(),返回一个list,就是dl下面所有<a>中的链接,接下来,我们需要拼接一个完整的URL,然后请求这个URL,用yield返回。因为我们真正要抓取的图片在第二层页面,所以这里的回调函数(callback)调用一个parse2(这是自己定义的一个方法),parse2用来处理图片链接。同理,parse2的response就是之前拼接的URL请求的页面返回的
用scrapy抓取网站图片

这里我们要到得到图片的地址,就是//div[@id='SearchCon2‘]/ul/li/a/img/@data-original,拿到地址之后,把它给item(我们定义了item的字段,用来存储图片的地址),这样item返回给pipeline

items.py

import scrapyclass Huaban2Item(scrapy.Item):# define the fields for your item here like:# name = scrapy.Field()image_url = scrapy.Field()image_paths = scrapy.Field()

pipelines.py

from scrapy.pipelines.images import ImagesPipeline
from scrapy.exceptions import DropItem
import scrapyclass Huaban2Pipeline(ImagesPipeline):def get_media_requests(self, item, info):for image_url in item['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 image")item['image_paths'] = image_pathsreturn item

因为要下载图片,所以需要在settings.py里配置一个路径,同时
需要的配置如下,其他默认就好

MEDIA_ALLOW_REDIRECTS = True #因为图片地址会被重定向,所以这个属性要为True
IMAGES_STORE = "E:\\img"  #存储图片的路径
ROBOTSTXT_OBEY = False  #Robot协议属性要为False,不然就不会抓取任何内容
ITEM_PIPELINES = {'huaban2.pipelines.Huaban2Pipeline': 1,
} #pipeline要enable,不然不会出来pipeline的请求

最后,我们写了一个begin.py的文件,用来执行

from scrapy import cmdlinecmdline.execute('scrapy crawl meipic'.split())

多说一点,可以存储不同图片尺寸,如果需要可以加属性在settings.py里

IMAGES_THUMBS = {'small': (100, 100), 'big': (800, 1000)}

好了,基本的都已经写好了,可以开始执行了。

转载于:https://blog.51cto.com/waytogo/2109243

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_730378.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

流量排名前一千万网站,三分之一使用 WordPress

百度智能云 云生态狂欢季 热门云产品1折起>>> WordPress 在官博发文&#xff0c;庆祝它在流量排名前一千万网站中的市场占有率达到了三分之一。据 W3Techs 的数据&#xff0c;WordPress 在前一千万网站的市场份额从一年前的 29.9% 上升到了现在的 33.4%。WordPress …

基于django的个人博客网站建立(一)

基于django的个人博客网站建立&#xff08;一&#xff09; 前言 网站效果可点击这里访问 之前基于hexo和github page搭建过一个博客网页&#xff0c;后来由于换了个系统&#xff0c;感觉弄的有点麻烦也就没有再去管它了&#xff0c;最近偶然从网上找到了几个模板&#xff0c;感…

Google浏览器70把所有HTTP网站标注红色“不安全”

谷歌这几年虽吵着大力推进 HTTPS 的加密普及&#xff0c;此之前还声明呢&#xff0c;但响应支持度效果不太明显&#xff0c;这下新版Chrome 70 做了提升&#xff0c;把所有的HTTP网站都标注红色“不安全”警告! Google用心良苦&#xff0c;从Chrome 56 就开始向HTTP网页列为不安…

免费为网站加上HTTPS

为什么80%的码农都做不了架构师&#xff1f;>>> 前言 最近有好几位同学直接微信赞助说快点更新文章。这个要和大家说声抱歉&#xff0c;的确很久没有写文章了。我们也不找借口&#xff0c;我会尽力保证多写文章。今天我们的主题来讲解 如何给自己的网站 加上HTTPS …

python 第一个网站应用

Hello,第一个网页分析 打开文本编辑器。这里要说一下啦&#xff0c;理论上讲&#xff0c;所有的文本编辑器都可以做为编写程序的工具。前面已经提到的那个python IDE&#xff0c;是一个很好的工具&#xff0c;再有别的也行&#xff0c;比如我就用vim&#xff08;好像我的计算机…

大型网站技术架构(一)大型网站架构演化

2019独角兽企业重金招聘Python工程师标准>>> 看完了有一本书&#xff0c;就应该有所收获&#xff0c;有所总结&#xff0c;最近把《大型网站技术架构》一书给看完了&#xff0c;给人的印象实在深刻&#xff0c;再加上之前也搞过书本上讲的反向代理和负载均衡以及ses…

一步步构建大型网站架构

2019独角兽企业重金招聘Python工程师标准>>> 之前我简单向大家介绍了各个知名大型网站的架构&#xff0c;亿万用户网站MySpace的成功秘密、Flickr架构、YouTube网站架构、PlentyOfFish 网站架构学习、WikiPedia技术架构学习笔记。这几个都很典型&#xff0c;我们可以…

息壤网络出现问题,大批网站受灾

很久没有更新自己的博客&#xff0c;今天上去看看&#xff0c;看看不要紧&#xff0c;出了大问题了&#xff01;我的博客是息壤的虚拟主机&#xff0c;放在北京亦庄IDC&#xff0c;网络速度还行。可是所有的php页面都不正常&#xff0c;出现如下提示&#xff1a;CGI/PHP程序错误…

大型网站技术架构(三)--架构模式

作者&#xff1a;13 GitHub&#xff1a;https://github.com/ZHENFENG13 版权声明&#xff1a;本文为原创文章&#xff0c;未经允许不得转载。 此篇已收录至《大型网站技术架构:核心原理与案例分析》读书笔记系列&#xff0c;点击访问该目录获取完整内容。 前言 模式&#xff1a…

服务器搭建网站完整教程

服务器最大的用途&#xff0c;就是可以搭建网站&#xff0c;许多人都认为搭建网站是一件很难的事情&#xff0c;因为包含许多的比较专业东西&#xff0c;比如服务器、编程之类的&#xff0c;确实&#xff0c;在几年前是这样的&#xff0c;普通人想要自己做一个网站太难了 但是随…

一起学爬虫——如何爬取通过ajax加载数据的网站

2019独角兽企业重金招聘Python工程师标准>>> 一起学爬虫——如何爬取通过ajax加载数据的网站      目前很多网站都使用ajax技术动态加载数据&#xff0c;和常规的网站不一样&#xff0c;数据时动态加载的&#xff0c;如果我们使用常规的方法爬取网页&#xff0c…

大型网站技术架构(二)架构模式

2019独角兽企业重金招聘Python工程师标准>>> 每一个模式描述了一个在我们周围不断重复发生的问题及该问题解决方案的核心。这样&#xff0c;你就能一次又一次地使用该方案而不必做重复工作。 所谓网站架构模式即为了解决大型网站面临的高并发访问、海量数据、高可靠…

Web 2.0网站的九个特点

作者&#xff1a; 阮一峰 日期&#xff1a; 2007年11月26日昨天晚上&#xff0c;我在看一本书《Amazon.com Mashups》&#xff0c;里面总结了web 2.0网站的九个特征。我觉得总结得很好。自从“web 2.0”这个名词被发明以来&#xff0c;就一直是一个涵义模糊的词&#xff0c;谁也…

登录各网站的字体异常小

今天同事二部刘洋说&#xff0c; 他的登录界面字体异常的小&#xff0c;我也感到莫名其妙&#xff0c;我好想没有遇见过这样的事情,360浏览器不行&#xff0c;IE也不行. 登录百度空间等其它网站也不行. 只好在网上寻找高手. 还好&#xff0c;很快就找到了. 以下是摘自网络高手的…

当你的网站被疯狂攻击时你能做什么?

前言自开始搭建网站八爪鱼招标网到现在大概有四个多月的时间&#xff0c;搜索引擎收录方面也从零收录逐渐的发展到在百度有四十万的收录&#xff0c;在360搜索有四万多的收录&#xff0c;搜索引擎流入的流量也慢慢增多&#xff0c;今天上班时 发现网站出现有故障&#xff0c;主…

网页素材大宝库:40套高质量的网站纹理背景素材

对于设计师来说&#xff0c;高质量的网站纹理背景图片是非常有价值的素材。在网上能搜索到各种眼花缭乱的纹理背景资源&#xff0c;但是要为网站选择合适的高质量背景还是非常困难的。下面分享向大家分享40套免费的高质量网站纹理背景图片素材&#xff0c;赶紧为你的网站换上&a…

大型网站技术架构(一)大型网站架构演化

2019独角兽企业重金招聘Python工程师标准>>> 看完了有一本书&#xff0c;就应该有所收获&#xff0c;有所总结&#xff0c;最近把《大型网站技术架构》一书给看完了&#xff0c;给人的印象实在深刻&#xff0c;再加上之前也搞过书本上讲的反向代理和负载均衡以及ses…

网站页面静态化方案

在大型网站中&#xff0c;访问者看到的页面基本上是静态页面。为什么都要把页面静态化呢&#xff1f;把页面静态化&#xff0c;好处有很多。例如&#xff1a;访问速度快&#xff0c;更有利于搜索引擎收录等。目前主流的静态化主要有两种&#xff1a;一种是通过程序将动态页面抓…

分享25个优秀的活动邀请网站设计案例

互联网出现以前只能用纸和笔制作简单的邀请函&#xff0c;如今婚礼、活动和会议等邀请都可以做成非常有创意的网页了。所以&#xff0c;今天本文要与大家分享的是25个优秀的活动邀请网站设计案例。 1. Herra & Viking 2. Camp Firebelly 3. Edinburg2Liverpool 4. Evening …

企业网站架构之Nginx详解原理以及工作模块;源码Lnmp架构

2019独角兽企业重金招聘Python工程师标准>>> Nginx详解及lnmp环境架构 一、Nginx详解以及优点 在当前互联网环境下,一般高端的服务前端都采用nginx作为web前端,而更多的都是采用lnmp架构,真正的后端服务器才会采用apache. 为什么这么做,要取决于nginx和apache两者之…