过往期的文章,我们可以爬取网页上面的文字信息,本期介绍一下如何爬取图片信息,以及保存图片到本地。
我们以校花网为爬取对象,爬取图片信息:http://www.xiaohuar.com
class PowersSpider(scrapy.Spider): name = "xiaohua" # 爬虫的名字 allowed_domains = ["xiaohuar.com"] # 定义第一个URL first_url = 'http://www.xiaohuar.com/list-1-1.html' def start_requests(self): # 返回调度器处理好的request yield Request(self.first_url, self.parse)
定义好爬虫的基本信息后,定义prase函数来处理爬虫信息
def parse(self, response): tds = BeautifulSoup(response.text, 'lxml').find_all(class_='img') item = PowersItem_xiaohua() # item初始化 # print(tds) for td in tds: name = td.find_all('a')[0].find('img')['alt'] address = td.find_all('a')[0].find('img')['src'] address = 'http://www.xiaohuar.com' + address item['name'] = name item['address'] = address yield item
通过查看网页信息,可以很清楚的知道我们爬取照片的信息,在照片信息里面有一个图片地址,但是这并不是图片的真正地址,图片的真正地址需要加上校花网的主页地址,当你把这个真正的图片地址输入浏览器时,就可以很清楚的看到图片的原图了,右击可以另存为,但是我们不会一个一个照片的保存
scrapy自带图片保存的中间组件,但是使用起来,比较麻烦,我们自己写pipeline来保存照片
class Powerspipeline_xiaohua(object): def process_item(self, item, spider): headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.101 Safari/537.36'} if isinstance(item, PowersItem_xiaohua): #请求网页 req = urllib.request.Request(url=item['address'], headers=headers) #打开网页 res = urllib.request.urlopen(req) #保存图片,并修改图片的名字 file_name = os.path.join(r'D:\foxtable\picture', item['name'] + '.jpg') with open(file_name, 'wb') as fp: fp.write(res.read())#保存图片 else: print('no find items') return item
python自带urllib,也可以使用urllib来做爬虫,在此我们定义 了一个headers
headers:
在使用python爬虫爬取数据的时候,经常会遇到一些网站的反爬虫措施,一般就是针对于headers中的User-Agent,如果没有对headers进行设置,User-Agent会声明自己是python脚本,而如果网站有反爬虫的想法的话,必然会拒绝这样的连接。而修改headers可以将自己的爬虫脚本伪装成浏览器的正常访问,来避免这一问题。
美女照片
运行以上代码,就可以把美女照片全部保存到本地了
本期只是爬取了一个界面,网友们可以参考往期的文章,爬取更多的界面,以便保存更多的美女照片。
下期我们分享一下如何爬取音乐文件
谢谢大家的点赞与转发,关于分享的文章,大家有任何问题,可以在评论区一起探讨学习!!!
什么学习HTML?
理解HTML代码是制作网页的基本技能。在互联网高度发达的今天,网页制作技术开始变的和修图、处理视频一样重要。
第一,学会制作网页就可以把自己想要展示的信息让其他人使用浏览器观看,无论是文字、照片还是视频都可以通过浏览器观看,甚至是分享自己制作的小游戏。
第二,理解网页运行的基本原理后可以更好的浏览他人的网页,寻找有用信息,更合理的使用第三方工具,简单高效的制作自己的网页。
HTML学习难度与重要性
HTML代码本身非常容易理解,使用也非常简单,但是单纯使用HTML代码写出的网页效果和我们平时看到的网页相差甚远。要想做出一个漂亮的页面,我们还需要CSS和JavaScript的帮助。
HTML、CSS、JavaScript这些不同的代码都有什么作用呢?简单来说,HTML代码可以为网页提供基本内容,比如文字、图片、音乐、视频等。CSS代码可以为页面安排布局,比如标题的位置、字体、颜色、大小等,笼统的说就是为HTML代码添加的内容增加样式信息,例如修改位置、尺寸、颜色等属性。JavaScript代码可以为页面提供交互(互动)功能,例如通过按钮控制页面内容的隐藏、出现,或者为多张图片添加轮播功能等。
对比起来,HTML的学习难度最低,但作用是最重要的,因为一切页面的基础是内容,没有内容,样式与交互都不存在。
认识HTML基本结构
第一行 <!DOCTYPE HTML>
第二行 <html>
第三行 <head>
第四行 </head>
第五行 <body>
第六行 </body>
第七行 </html>
以上七行代码是一个网页文件的HTML代码的基本结构。
大家观察一下可以发现一个规律,每一行的内容都是写在“<>”里面的。原因说来话长,先记住就行。每个写在“<>”里面的内容叫做“标签”。以后“标签”这个词会经常出现。
第一行<!DOCTYPE HTML>标签指示 web 浏览器关于页面使用哪个 HTML 版本进行编写的指令(这句话可以暂时不必理解)。重要的是这句傲娇的代码只能存在在HTML代码的第一行!
第二行<html>标签与第七行的</html>标签是一对,“<html>”叫做开始标签,“</html>”叫做结束标签。他们之间的区别在于结束标签比开始标签多一个“/”。这是HTML代码的一个重要规律,以后我将要学到的大部分标签都是这样的,可能浏览器有些强迫症吧,如果没有结束标签它会很不舒服,有可能会消极怠工而产生麻烦(不能正常显示)。不过遗憾的是<!DOCTYPE HTML>太傲娇,至今没有另一半。<html> 与 </html> 标签限定了文档的开始点和结束点。
第三行与第四行组成一对,叫做“head”标签。顾名思义,这个“头”标签里的内容统领全局,比如控制布局与样式的CSS代码文件和添加互动功能的JavaScript代码文件在这里添加或导入;搜索页面用的关键词信息在这里添加;页面信息的编码方式也是由此指定;浏览器窗口的标题也在这里显示。
第五行与第六行组成一对,叫做“body”标签。用来显示所有的页面内容信息。
画个图来表示一下这四个标签的层级关系(就是谁包含谁的意思,或者谁在谁的势力范围内出现):
边学边练------写一个最简单的页面
正所谓万丈高楼平地起,下面我们就动手做我们的第一个网页文件。
工具:电脑,安装一个浏览器(IE 火狐 谷歌浏览器都可以),确定“记事本”工具可用。
有了以上工具我们就可以写了。
Step1 新建一个.txt文件。
操作如下:
(1)选择合适的磁盘,比如D盘或F盘新建一个文件夹,命名为“网页”。点击进入。
(2)在空白处点击鼠标右键新建一个文本文件,命名为“第一个页面”。这时我们就有了一个“第一个页面.txt”文件了。
如果你的电脑不显示“.txt”这样的文件后缀,可以在屏幕左上方寻找“查看”菜单,如图2
图 2
点击后,出现如下菜单如图3,点击“选项”。
图 3
点击“查看”,去掉“隐藏已知文件类型的扩展名”选项前的“对号”,如图4所示。这时就能显示或修改文件后缀了。
图 4
Step2 添加内容
(1)双击打开“第一个页面.txt”文件,把HTML基本结构共七行代码输入进去。
(2)保存,关闭文件,在“第一个页面.txt”文件上点击鼠标右键,选择“重命名”,将“.txt”修改为“.html”。这时,系统会提示,如图1,大胆点“是”。
图 1
这时我们的文件就变成了html网页文件了。
我们双击这个文件发现浏览器内一片空白,这就好比我们在桌子上摆了个碟子,里面并没有放美食。浏览器中的一片白就是空碟子的颜色,而HTML基本结构就是这个碟子。
下面我们往碟子里加点东西。
Step3 添加内容
(1)在“第一个页面.html”文件上点击鼠标右键,选择“打开方式”,选择“记事本”,如果没有“记事本”选项,请点击“选择其他应用”,点击选择最下面的“更多应用”,选择“记事本”。下一次选择“打开方式”时,“记事本”就会出现了。
(2)在<head></head>标签之间添加“<title>学习写第一个网页</title>”。在<body></body>之间添加“<h1>第一个网页</h1>”;“<p>随着学的内容越来越多,网页就会越来越漂亮了!</p>”完成如图5
图 5
(3)保存,关闭,双击打开!效果如图6
图6
今天的边学边做就到这里,下一次会详细解释<head>标签、<body>标签中常出现的子标签以及它们各自的作用。
第二篇《边学边做网页篇——<head>标签里装点啥?》http://mp.toutiao.com/preview_article/?pgc_id=6738988870622249479
网页下载下来使用,在日常工作中使用频率还是很高的,有时候确实能解一时之急,我自己就有很窘迫的经历。
我开会的时候,都会把准备好的文档存在局域网,到会议室直接打开就能直接用了。有一次到分公司,由于分公司刚刚成立,内网还没有和母公司连通。结果这下子懵逼了,上不去内网,看不到文档。又是叫同事发过来,又是提发送文件的安全申请,让人着急。
如果把网站保存下来,放在自己的电脑中,既不用担心信息泄露问题,又不用为了看不了文档而着急。
遇到问题,记录下来,然后解决问题,程序员的解决思路永远是自己创造轮子的,接下来就是不断的探索解决方案。
其实下载网页的方式有很多种,其中有几种办法使用的比较多,例如:如果你用Chrome,直接按 Ctrl+s 就可实现。使用这种方法,Chrome会把整个网站,按照编译完成的源码目录结构保存下来。像下面这样:
下载完成的文件直接点击 xxx.html 可以直接离线访问,但是这种方式对目录的依赖结构比较高,怎么理解呢?就是 html 文件和对应文件名的文件夹必须在同一个目录中,才能正常使用。拷贝到其他机器的时候必须要两个同时拷贝才可以,否则就会排版错乱。
如果有十个或者更多的网页需要拷贝或者删除,就会很麻烦,例如我想在其中找到其中几个,复制到其他地方,很容易弄错顺序。
HTML 是一种纯文本格式,它用于排版文字。纯文本文档的意思就是,文档中只包含文字内容,不包含二进制内容,举个例子:打印出的A4纸,只有文字没有图片。而 HTML 想要显示照片等二进制信息,通常都会链接到其他文件,也就是上面文件夹里面的内容。
不过 Chrome 下载文件这种方式也有优点,下载下来的文件可以保持独立性,比如说,我需要这个网页中的一张图片,那么就可以直接到文件夹里面寻找了。
另外还有一种办法,也有很多人再使用。Chrome 在打印网页的时候,会把网页转成 PDF ,然后在进行打印。那么就给我们提供了很明确的思路,把网页直接保存为 PDF ,这样保存下来的网页就只有一个文件。
使用Chrome,直接按下Ctrl+p就可以。然后目标打印机选择 另存为 PDF 。
这个功能很多浏览器都支持
但是这种办法也有很明显的缺点,由于 PDF 是静态文档,网页上的一些动画可能不会正常显示,而且排版也有可能会错乱,这完全靠运气。个人觉得这不是一种很靠谱的方法。
这时候主角来了!有一个工具既可以把网页保存为 html 又可以保持是单文件。他就是 monolith ,你可以在 github 上面找到它,但是源码并没有编译为可执行文件,我把它编译了一下,下面会放上来链接,https://github.com/leconio/Repos/raw/master/monolith.7z。
那么下面就简单说说使用方法:如果你下载我的链接,那么里面有三个文件:
第一个是Mac平台编译出来的,使用方式为:
./monolith 网站地址 > xxx.html
默认情况下 monolith 会把生成的 html 输出到标准输出流,也就是当前终端。使用 > 我们把输出的内容重定向并覆盖到文件。
执行完成之后,在这个目录下面就会有一个对应的文件:xxx.html 。
另外两个是 Windows 平台使用的。为了简化使用,我写了一个 CMD 脚本。直接点击 monolith.cmd ,然后粘贴地址就可以完成下载。
下载完成之后,在本地你会发现只有一个 html 文件。我们打开之后,发现图片和JS等信息都在,而且排版正常。那么就要思考了,我们之前说过,HTML 是放置纯文本信息的,那么图片在哪里呢?
答案显而易见,就在 HTML 文件里面。为了方便小图片传输,有一种叫 Base64 的东西,它可以把二进制信息变成成纯文本。这在使用 Json 传递数据的今天十分常见,它可以减少一次请求(题外话),这里就是用的这个原理。monolith 把图片等二进制内容转为了纯文本,保存在 HTML 文件中。我们在下载的文件源码可以看到:
对比源代码,src 信息已经变成了 base64 格式的图片,就是那串乱码。复制那串乱码,从网上搜一个 base64 转图片工具,粘贴进去,这时会发现就是我们看到的那张图片。这样一来,无论这个网站上有多少个文件,都会保存到一个 HTML 文件里面,而且还能离线使用。
当然,base64 编码的图片比原生图片略大,这可能也是你现在在担心的问题。不过 monolith 会特殊处理文件体积。我们可以看看 Chrome 直接下载和使用 monolith 下载体积相差多少。我们把两种方式下载的网页都进行了 7-Zip 压缩。
我们可以看到,使用 monolith 下载会比 Chrome 直接下载小一倍还多!
最后要说的是局限性,无论那种方法,都几乎不能把视频网站中的视频下载下来。因为现在的视频地址都是 Token 加密的,同理,使用 Token 加密的其他请求信息也无法下载。
比如你可以试试下载其他网站的首页,Logo 和视频都是下载不了的。但是也有解决办法,那就是另外一个领域的事情了,以后有机会说给大家听。
如果这篇文章对您或者您的朋友有帮助,感谢您关注,转发。
*请认真填写需求信息,我们会在24小时内与您取得联系。