编写学习爬虫历程日志(一)

本人小白纯初学者,意图通过记录实践过程有效掌握和巩固所学知识,为将来打好基础和留下回顾整理的空间,有用自取。当然如果有大神可以指出我存在的问题或者解决我所留下来的不能解决的问题,就再好不过

(该日志需要更新的地方:
1没写完,因为实际没完成
2加粗是自己新了解而没有完全掌握的内容或者需要掌握的内容,需要去了解和总结)
3需要对日志的内容进行分序归总,总之不能乱)

理想爬虫步骤:
1,找到网页所需元素相应标签
2,编写代码,发出请求,爬取所需信息
3,整理信息,下载

实际过程:
第一步就出错,然后步步都有问题,每个问题都带来新的需要去了解和掌握的内容。在这中间还存在大量的低级错误和不断试错调试的过程。

在一开始的时候,我想要在另一个网站上批量下载图片,但通过查看源代码发现他们的图片url的源代码从/i/开始而不是http。一开始以为,在原网页同一目录下,但一番尝试后,发现不仅原网页的同一目录下不行,连原网页的相近目录,父目录等等好像都不行,查询相关内容无果后,
发现图片地址的录入有相对路径和绝对路径
两种形式,绝对路径不必多说,
相对路径,只有两种引用方式,一种直接,文件名.文件格式,另一种是…/表示源文件所在目录的上一级目录,…/…/表示源文件所在目录的上上级目录,以此类推且当引用下级目录的文件时,直接写下级目录文件的路径即可。
在此时,我已经向想通过知道服务器是如何传输图片上去,然后借此知道如何反向爬取图片,但最终因找不到明显线索而无果。
此时,我不得不替换目标,找了一个可以达到相似目的且可以找到完成路径来源的网站。
首先,我按照自己的经验,使用相对最熟悉的requests和re库去爬取网页信息,虽然没有beautifulsoup方便和scrapy的成熟框架,但相对熟练。
然后 在刚开始的过程中,出现了一些编程时的小错误,以及很多记忆不牢固的地方,需要巩固
解决后,发现了第一个大问题,出现第一次服务器主动断开连接的现象,检查后通过更换完善表头信息(AU信息更换,增加referer信息)得以解决,(scrapy库自己并没有真正弄懂),这中间也出现了一些小的错误,就先按下不表。
再调试程序,发现还是出现了10054的错误,但也有部分成功爬取的现象。在再次更换头部信息无果后,怀疑因为爬取频率过高被服务器限制爬取。使用time模块降低频率,在查询网络后加入socket模块在这途中我还发现了自己没有真正了解整个信息通信的全过程和架构,不知道信息可能在哪几步出现传输错误以及socket到底是什么)和使用close函数去使程序在连接异常的情况下继续进行和及时关闭网页请求,来防止被反爬虫。
但无果,爬取情况依旧不变,大部分情况下失败,少部分情况下异常。

在这种情况下,我先开始转向自己尚不熟悉的scrapy,然后发现了一个事实:实际上自己并不真正了解scrapy。接触时间太短,看起来会了,但实际上用起来还是一脸懵。

随即,我果断放弃scrapy,转而开始思考服务器是如何反爬虫的以及反反爬虫又是如何进行的。(cookies涉及登录信息)我了解到一般服务器反爬虫的机制主要是通过三种方式 特征,蜜罐以及展示。反反爬虫,我也了解了很多,简单的有伪造头部信息,降低频次,发送cookies等方式。难的我也暂时不必了解,因为我所爬取的内容和网站一定不用这么高端。

在了解了之后,我认为我被拦截的主要原因是因为我所展露的爬虫特征身上,而不是蜜罐和展示。但是,我又不知道服务器是如何识别出来的,该网站的浏览无需登录,自己设置的头部信息又自认完善,频次过高导致服务器抵制已经遭到我排除,因为在与其他网友比对之下,发现自己的爬虫频次实在不值一提。
短暂考虑后,我认为有几个可能的原因:
1,存在未知特征保露自己2,服务器太垃圾响应过于迟缓3,头部信息与真实信息不一致被服务器发现,比如自己电脑内不存在有头部信息所说的浏览器

在这种情况下,我决定安装selenium,学习用selenium来解决特征被识别的问题。在安装selenium时,我又发现了问题安装selenium,势必就要安装webdriver,在不想再安装其他浏览器的情况下,我选择用windows自带的Edge结果发现没有找到合适自己版本的webdriver(版本17763日期20年2月7)。于是,无奈之下,我选择安装Chrome。在经历了几次脑残的错误之后,我终于成功安装了chromedriver,并且成功在vscode上实现使用。但此时,我发现就算用selenium去替换requests,结果还是一样,被识别了出来。

但就在这时,我回想起了,搜索selenium时发现的不被服务器发现,隐藏特征的方法。在尝试过后发现可行!!(但自己没有细看原理和解释,要回头重新看!)至此成功解决被服务器识别出来的问题,但是也产生了新的问题。selenium并没有像requests一样提供方便的content函数使用可以将图片信息以字节的形式写入文件中。查询之下,想通过encode函数解决问题,但发现不行。
一种解决方案,查看requests库的源代码,找出content函数部分进行模仿
(在这中间我还了解了一点xpath)

总结还需要了解的部分:
了解socket相关
总结信息通信的过程
深入了解反爬虫和反反爬虫的方法
深入了解cookies相关
学习掌握selenium
深入了解xpath和css

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值