其实, 很多人投身于学习的一个非常关键的原因在于, 他们具备了一种能力, 这种能力就是能够十分轻松地把某个网站上面的数据进行抓取下来并保存好。
尤其是, 在电子商务的那个行业里面。
领导指示说, 要去开发并且制作出来一款专门用于进行交易买卖游戏周边商品的应用程序。
我说, 那好, 既然如此的话, 我们到底去销售一些怎么样的东西。
领导, 您看看那竞争对手在卖什么东西, 然后我们就去售卖那些跟他们一模一样的东西。
既然如此, 我决定去获取一些数据。
把玩笑这个事抛开不说, 尽管这里面有夸大其词的成分在里面, 但是说这话也不是完全没有道理的。
作为入门级别的步骤, 首先我们要来学习一下应该如何去爬取网站上面的图片。其实只需要调用4个方法, 就可以十分轻松地批量拿到那些网站的图片了。
为了缓解初学者在进行学习时遇到的困难, 所以我们专门建立了起来一个学习扣QUN, 其中包含的具体信息为: ⑧⑤⑤-④零⑧-⑧⑨③, 在这里会从零基础的情况出发, 一直到涵盖各领域的项目实战教程、开发工具以及电子书籍等资源丰富内容与你分享。
企业当下对于人才有着怎样的具体需求, 以及如何学好的一些高效技巧都会得到呈现, 此外还会对最新的教程保持不更新的动态跟进状态。
接下来会对在每一步当中所涉及到的调用方法来进行非常细致的解释, 不过这些内容主要是本人在借鉴了别人提供的代码之后, 在实际使用过程中所遭遇的各种问题与陷阱的详细阐述。
第一步要做的, 就是去取得那个网页的源代码。
使用括号中的方法进行读取操作。
该方法用于获取通过访问指定请求URL所返回的网页源代码信息数据, 在返回值呈现为bytes类型的情形下, 需要将其转换为utf-8格式, 这样才能实现数据在程序中的正常显示操作, 因此必须额外调用()方法来执行解码处理流程。
最后我们所获取到的, 其实就是我们在日常当中进行编辑或者用来查看的那些页面的源代码。
这里可能会出现的错误的信息, 是:
1.存在非ASCII字符编码, 具体显示为xe5。
原因是存在编码方面的错误, 默认的编码文件使用的是ASCII码, 而你的文件中包含了中文以及其他非英语的字符。
找到那个问题的解决方式, 就是把字符串 # -- : UTF-8 -- 添加到第一行里去。
2.要是你要去抓的那个网站用的协议是https的话, 那在向它请求的时候呢, 就得专门去验证一下那个SSL证书。
具体的解决之道是, 你需要把接下来的这段代码进行全局范围内的添加和插入。
进行到第二个阶段的时候, 把那些图片的链接给它筛选出来。
这一步是非常关键的, 这是因为在一堆网页源代码中间, 必须去把目标对象也就是图片地址的那些特有的结构性质给找出来。那么具体该采取什么样的方式去寻找呢?
1.了解图片URL的html表达方式
凡是那个学过html的小伙伴他肯定都晓得, 图片的那个标签它是有src这个属性的, 而这个src属性专门用来定义那个图片源路径的。
2.我们可以使用正则表达式来进行匹配的这样的处理。
对于这个正则表达式里面所有的这些符号所代表的具体意义, 我也是没有进行过一个比较深入和详细的了解, 所以在这一个部分我就不进行额外的展开了。
这个正则表达式的用意呢, 是去过滤出那些标签名称被包含在指定的集合中的元素,同时还需要满足一个条件, 就是它们的src属性的值必须以http这串字符作为开头, 并且要以jpg这四个字母作为结尾, 最终把符合这些条件的源代码部分筛选出来。
每一个网站所设定的相关规则都是存在差异的, 是完全不一样的, 所以我们绝对不能直接将之前编写好的代码套用到这个新场景中去使用。
以一个简单的例子来进行说明, 当需要您爬取的网站中所包含的图片是处于png格式状态的时候, 倘若直接拿源代码去执行运行操作的肯定就是无法抓取到任何内容的。
再有一个例子, 就是在最开始设置规则的时候, 因为没有加入以 http 开头这种条件, 结果就抓到了一些使用了相对路径的图片的 url 的数据了, 这就导致了在后面访问该 url 的时候会出现无法访问并且报错的情况。
3.把所有的、符合那个规定条件的代码, 都给放到一个表格里去。
pile这个操作是根据那个包含了正则表达式的字符串来创建一个模式对象的, 用户在实际使用中只需要直接把它拿来应用就行。
返回中所有与相匹配的全部字串, 返回形式为数组。
我们来试着把它打印输出看看具体的结果, 然后去观察一下, 到底是不是能够把所有符合匹配要求的内容全部都查找出来。
进行第三步, 也就是对用于保存图片的路径做出明确的定义。
这一步取决于你个人的习惯。如果只是处理少数几张图片的话, 那么就没有必要去新建一个文件夹, 从而也就没有必要把所有图片都保存到那个新建文件夹里面去进行整理。
如果在操作过程中, 需要爬取的网站或者网页的数量级是处于相对比较大的情况之下, 我们建议将其中的所有内容都整理并且放在同一个文件夹里面去, 这样子在管理的时候是比较方便的。
对于像是“新建文件夹”这种非常基础的操作, 只需要直接调用os库中提供的方法就可以了。
但是这里存在三个需要大家予以关注的注意点。
1.正在新建文件夹, 你是打算指定某个具体的路径进行创建呢, 还是选择在当前的路径下直接生成这个文件夹?
指定路径这个操作其实非常简单, 你只需要直接把你心里那个想要创建文件夹的具体完整地址给复制出来, 然后, 再把那个新建文件夹的名号给接上去, 就这样组合成一个整体, 作为一个参数, 二话不说就直接写到你打算用的那些方法代码进去里面就搞定了事情。
eg.()
首先要获取当前存在的这个目录, 随后再把新建的那个文件夹的名称给它拼接在一起。
获取当前目录的方式是:os.()
eg.
2.新建的文件夹的情况是存在还是不存在?
在同一个目录下面, 是不可以出现名字相同的文件和文件夹的, 如果你不进行任何处理就直接去创建的话, 那么系统就会给你一个报错, 说那个文件已经存在了, 因此无法完成创建的这一操作。
3.大家应当考虑一下, 会不会因为macos这个系统的路径表示做法和大家平时见到的不太一样。
你要稍加留神, 因为那两个操作系统在处理路径表述这一事儿的时候, 弄法是不一样的, 特别是指在确定具体路径的那个环节上, 如果你不把正确的那条路径输入进去的话, 那个创建的操作肯定是没法儿成功完成的。
第四步: 把那个图片的地址保存到一个文件夹里面去。
眼下, 图片的链接地址已经放到了列表里头了, 这个操作可以在第二步看到情况。保存这些图片用的文件夹呢, 也准备妥当。这样一来, 就能把那些原本只存在于网络上的虚拟地址, 转换成实实在在存在电脑里的png格式或者jpg格式的图片文件。
这个方法就是把远程的数据下载下来存到本地电脑上去。
这指的是url, 也就是地址的意思, 它可以是远程服务器的地址, 也可以是本地计算机里面的地址, 具体到当前的使用场景里头, 就意味着你需要把图片的地址放进去。
保存的完整位置指的是路径加上文件名这样的组合。如果没有对这个参数进行指定, 那么系统将会生成一个临时文件用来完成数据的保存任务。。
这里要注意3个地方:
1.图片这个文件的名是怎么生成出来的?
建议使用一种最为简单的方法来生成文件名, 具体做法是把递增的数字和图片后缀组合起来。
在此处需要再次强调一下, 建立新文件夹究竟具有何等重要意义。
之所以如此说, 是因为在成功建立起这个新的文件夹之后, 其所处的整个目录环境将会呈现出一种完全崭新且空白无害的状态, 因此你绝对不需要去担心那些系统自动生成的文件名字符串, 会不会和该目录下原本就已经存在的老文件名发生那种令人不安的重复性冲突问题。
递增数字指的是这样的状况, 拿第一张图片做个例子来说, 这个图片的名字被叫做“1.jpg”, 然后紧接着的第二张图片的名字就被叫作“2.jpg”, 这种命名方式在后面就会按照这个顺序继续进行下去。
2.通常情况下, 通过技术手段从一般的网站上面抓取下来出来的图片是多张的, 针对这种情况该如何进行批量上的处理。
这里也是说明了, 为什么要把抓取到的图片url存到 list 里面去了, 给 list 提供一个循环, 每个 url 调用一次 ..() 方法, 那就相当于每个 url 都保存成为 1 个图片。
3.出现了这样的, 具体的状况是HTTP错误代码403。
原因: 有一些网站是做出了处理了, 这个处理的结果就是禁止爬虫。
解决这个问题的方法可以是, 在发起请求的时候加上头部的信息, 把 User-Agent 这个字段设置成模拟浏览器的访问行为具体的这些参数内容你可以借助火狐浏览器里面的某个插件去获取, 然后在进行请求操作。
程序跑完之后, 最后拿到的东西是一堆子图片。
其他问题
1.没有进行自动安装或者导入第三方库这个行为的发生, 比如说像那些相关的库文件就没有被处理。
报错了, 没有那个名字。
解决方法是通过安装第三方库来实现。在Mac机上, 系统在完成软件包的安装之后, 会自动配备pip3这个工具。于是乎, 大家每次需要的时候, 直接使用pip3命令就可以成功执行安装操作了。
至于具体该怎么去弄明白这个工具的用法, 建议大家自行去百度搜索一下相关的教程或者说明文档, 另外请小伙伴们注意要去区分清楚它和普通情况下的差异在哪里。
敲入安装命令, pip3。
2.千万要千万要注意, 这和mac系统的路径表达方式是有着完全不同的大不一样的, 你绝对不可以弄混淆。
之所以会出现这个令人感到头痛的问题, 其原因在于我是来回切换着两个不同的操作系统来使用的, 因此我每次都必须记得去做修改, 这样做实际上并不存在任何技术上的难度, 当然, 除此之外还可以采取再增加一层用于进行系统判断的方法来让它实现兼容。
完整版的全套学习资料
学好的话, 无论是去找工作挣钱, 还是去做副业来赚钱, 都算得上是不错的方向, 然而想要真正学会好, 必定要有一个学习计划。最后给大家分享一份完整的一套学习资料, 用来对那些想要学习的小伙伴们提供一些一点帮助!
一、在各个方向上, 所涉及到的学习流程与路径。
对于所有方向路线这一件事, 就是要把大家平时常用的那些技术要点给收集整理起来, 然后把这些整理出来的东西合并到一起, 弄成一个专门针对各个不同领域的知识点的大集合, 那么它到底有什么好处和用处呢?
其实它的用处就在于此, 你可以直接对照着上面已经列好的那些知识点去查找、去寻找对应的学习资源, 通过这种方式来操作的话, 你就能保证自己学到的知识是比较全面的。
二、学习软件
做事的人要想把工作做好, 那就一定要先把工具使用得熟练。目前, 大家所熟知的各类开发软件的使用技巧都已经整理在这里了。这样的做法能够为大家节省下非常多的时间段。
三、入门学习视频
我们在看视频学习的过程当中, 不可以只让眼睛和脑力进行运转, 而不切实动手操作。相对而言, 一种更为科学的学习途径是必须建立在彻底理解的基础之上对其加以运用。在此阶段, 实际的操作练习类项目就展现出了极高的适切性。
四、这是一个实战案例。
很多人会觉得纯光学理论没啥实际用处, 所以必须得跟着动手敲代码, 只有亲自进行实操训练, 才能把学到的那些本事真的应用到具体的情况里面去, 在这个过程里, 完全可以找一些实际的案例拿来学习。