这篇文章不算是什么经验分享,顶多是学习记录吧~
------------------------- 欢迎各路大神批评 ----------------------------------
url-----> 请求url----->请求成功,这往往是最关键同时也是最耗时的步骤。
爬虫是分布式、多线程、多进程?爬虫需要解析html、解析json?爬虫抓取的数据是写入数据库、写入本地的CSV、还是TXT。这些都必须是“请求成功”这个前提下进行的。
大部分课程讲解的主要是这个东西:web_data = requests.get(url)
按照这个东西,的确有部分网站你可以请求成功。但是遇到复杂一点的网站,具有反爬机制的网站。这个往往是行不通的。
代码如下:
HTTP状态码(英文HTTP Status Code)
当浏览者访问一个网页时,浏览者的浏览器会向网页所在服务器发出请求。当浏览器接收并显示网页前,此网页所在的服务器会返回一个包含HTTP状态码的信息头(server header)用以响应浏览器的请求。
功能:
1.大规模抓取时候,一般需要在request中加入proxy。保证你的IP不会被封。
2.加入timeout、headers、cookies保证请求能顺利进行。
3.当出现网络原因或其他原因造成网站连接失败,能够重新请求。
4.当这次请求出现200、404、429、503、403、或者其他状态码时候如何处理。
5.每次请求之后,随机sleep一段时间,尽量降低对网站服务器的影响。
6.加入try except,判断出现异常时如何处理。
说明:
1.429状态码是由于多进程并发请求造成的,不处理的话,多请求几次就可以了。因此,这部分仅仅是放在循环中,并没有进行处理。
2.503状态码是对方服务器的原因,但是经过测试发现,同样的request,多次请求之后还是可以转向正确的200。因此这部分也是放到循环中,没有进行处理。
3.404是请求的网址为空,这个经过本人测试,大部分网址虽然第一次返回404,但是多次请求还会出现200。因此多加入了一个判断。
4.403是请求没有被允许,因此需要单独记录这部分的url有哪些,以方便日后分析。
友情提示:在抓取对方网站之前,如果对方有robot.txt的话,建议先浏览一下。23333333333
网友评论