Python爬虫小技巧(页面解析,多进程,模拟浏览器,错误处理等)

本博文总结一些常用的爬虫小技巧,不涉及任何爬虫框架,适用于为科学研究或者教育目的而从互联网上爬取少量数据,内容较为粗略,仅从较高抽象层次进行说明,涉及的模块使用方法或者代码实现可以另行搜索其他相关资料参考。

 

数据需求分析

首先,要明确实验项目需要哪些数据,例如电商网页中的商品名字、商品价格或者社交网站中的评论标题、评论发表时间等。

网页结构分析

根据上一步的数据需求分析结果,分析含有所需数据的网页的结构,看一下是否有固定的存在格式或者请求方式,就是要发现规律。

网页内容获取

推荐使用requests包,其中常用的参数有headers,timeout(connect timeout和read timeout),proxy。

  • 对于headers可以通过浏览器(chrome)的Network面板获取Request Headers,如下图所示:

  • headers中的cookies设置以及更新,请查阅其他资料,本文不做介绍,headers中的user-agent可以区网络上搜集几个,也可以使用random-user-agent包随机生成,然后随机替换着使用。
  • timeout包括连接超时和读取超时,建议设置一个合理的阈值,如果只传一个值,则该值同时为连接超时和读取超时时间,如果传入一个元组,则可以为两种超时分别设置时间。
  • proxy,如果你需要代理,以字典形式传入,例如proxies={"http": "234.122.9.1:4897"}

网页内容解析

使用requests获取内容后推荐使用BeautifulSoup和lxml包进行页面内容解析,当页面的结构的一致性程度高时推荐使用lxml配合xpath,当然也可以使用BeautifulSoup(例如获取表格或列表等内容);内容非结构化程度高,推荐使用BeautifulSoup和正则表达式。

异常处理

可以先使用for循环写一段爬虫代码,然后运行一小段时间,看看是否有bug造成大量异常,根据异常信息,进一步完善,不要苛求不出一点异常,差不多完善的时候,开启日志打印,并且将错误信息单独记录在日志文件,最后将日志文件中的异常进行统一处理,确保程序不会因为偶发异常而出现运行错误,同时建议以追加的方式分批将数据写入本地,提高效率的同时,确保数据不会因意外异常而全部未保存,此处推荐try...except、traceback、logging包一起使用。

多进程

当爬虫代码跑起来没什么大问题时,查看一下速度如何,如果获取完全部数据需要的时间太长,建议使用Python的多进程,推荐multiprocessing模块,如果在多进程处理中涉及文件的写入,可以配合该模块pool函数的callback参数,确保写入的顺序不会乱套,也避免了加各种锁,可以参考博文《Python多进程写入同一文件》,配合多进程的爬虫一般明显提升爬取速度。

处理网站的反爬虫

如果在代码层面很难处理网站的反爬虫策略,那么最后迫不得已可以使用selenium模拟浏览器行为,也可以同时配合使用多进程,这种方式比较耗费资源,并且效率较低,好好分析网站和想想办法避免被反爬虫,实在不行再用这种方式。

 

上述内容仅为个人使用经验的总结,后续会持续更新,不免会有遗漏或者错误,请各位在评论中不吝赐教,共同学习和进步。

 

 

 

 

 

©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页