python爬虫网络出错怎么办_Python爬虫常见问题

第一个问题:JS加密如何突破

(1) 熟练掌握Chrome的开发者工具的各个功能,Elements, Network,Source

(2) 认真观察,善于思考。Network查看加载流程,找可疑的xhr请求,设置xhr断点,通过Call Stack 回溯js执行过程,边回溯边查看上下文代码。能读懂js,知道js的相关知识,比如js里面的window变量。

(3) 以上是通过debug js找到js加密解密的代码,然后通过Python重新实现,这个过程很长,可能耗费你几天的时间,一旦网站改变一下js算法你的Python实现就不能用了。

(4) 用Selenium可简单突破,并且网站随便该都无所谓。唯一遗憾的是,Selenium的运行效率较差。但是,作为一个能用js加密来保护数据的网站,单价的运行效率应该足以满足网站的访问频率限制。这时候,更多的思考是如何增加资源(IP、账号)来提高抓取效率。

第二个问题、多线程、协程,多进程的选择

(1)爬虫是IO密集型任务,大部分时间花在网络访问上,所以多进程不适合网络爬虫,而多线程、异步IO协程更适合,而异步IO是最适合的,它相比多线程,协程间的切换代价更小,我们提倡使用异步IO而非多线程。异步IO的模块主要是:aysncio, aiohttp, aiomysql 等。

(2)网页爬下来后从中提取想要的数据是CPU密集型的,这时候可以用多进程并发提取。

(3)我们推荐的爬虫策略是,爬虫只管爬,把爬下来的html保存起来,存到数据库。然后单独写提取数据的提取器,单独运行提取器。好处是,提取不影响爬取,爬的效率更高,并且提取程序可以随时修改,有新的提取需求时不需要重新抓取。比如,最初写爬虫时只想提取网页中的两项数据,运行一段时间后,发现另外3项数据也很有用,如果保存了html,只需改改提取器重新跑一遍就好了。

第三个问题、如果想要保留加粗或者图片原始位置,只能通过挖掘规律再写正则表达式来针对性处理吗?

网页数据提取主要两种方法:正则表达式,xpath。通过xpath可以获得某个html标签节点。比如,一篇blog网页,它的主体内容都在某个标签里面,可能是某个div。用xpath得到这个div,转换为html,就是包含了格式及其图片的部分,你保存这段html代码而非纯文本就好了。

第四个问题、爬虫的增量爬取、断点续爬、去重等

(1)通过网址池的概念去管理所有的URL

(2)增量爬取就是不重复下载已经下载过的,让网址池记住那些已经下载过的URL;

(3)断点续爬,就是上次还没有爬取的URL这次接着爬,还是让网址池记住那些还没被爬取的URL

(4)爬虫的去重,让网址池记录URL的状态以避免重复爬取。

第五个问题、爬虫的部署问题,在公司是不是分布式爬虫系统比较多会涉及部署问题

爬虫的部署,不一定是分布式的。大规模的爬虫,突破了目标网站限制的爬虫才会涉及到分布式,分布式的好处是抓取速度提高,但是管理会比较复杂。

第六个问题、网页的自动解析?这个话题就包含很多子任务了: 怎么自动抽取文章的内容,如何处理各种各样的时间格式,怎样处理翻页

(1)文章内容的提取,基本的是每种网页建立一个提取模板(正则表达式),好处是提取精准,坏处是工作量大,一旦稍微改版就失败。通过算法建立单一提取程序,基本上都可以提取,但是可能会有写杂质,比如文末的相关阅读。好处是,一劳永逸,不受改版限制。

(2)时间的提取,除了正则表达式之外似乎没有特别有效的方法。

(3)翻页的话,如果只是抓取,把该页的url提取出来继续抓;如何在提取内容时要把多页内容合并成一个网页,那就要特别处理。

第七个问题、爬新闻类的网站时,如何做好同一新闻,各网站相互转载,爬取时文本去重

比较著名的算法是,Google的simhash,但具体实践中比较复杂。网传百度的做法是把文章的最长一句话(或多句)做hash,这个hash值就是文章的唯一性代表(指纹),这个方法准确率很高,但是召回率比较低,一旦这最长的几句话改一个字就不能召回;我改进了该方法,对n句最长的话分别做hash,一个文章由n个指纹(如图人的是个指头指纹都不一样)确定唯一性。准确率和召回率都还不错。

第八个问题、异步爬虫的设计

(1)一个好的URL管理策略,见猿人学上的网址池相关文章;

网址池是一个“生产者-消费者”模型,爬虫从中取出url去下载,下载的html中提取新的url放入池中,告诉url池刚才拿出的url是否下载成功;再从池中取出url进行下载。。。url池是核心部件,它记录url的不同状态:

(a)下载成功

(b)下载失败n次

(c)正在下载

每次往池子添加url时都要检查url在池中的状态,避免重复下载。

(2)一个好的异步协程管理策略,见猿人学网站上的大规模异步新闻爬虫的文章。

每次从urlpool中提取n个url,生成n个异步下载的协程,通过一个变量记录协程的个数(也就是正在下载网页的个数)。

大规模异步新闻爬虫:实现功能强大、简洁易用的网址池(URL Pool)

大规模异步新闻爬虫: 用asyncio实现异步爬虫

异步URL管理 异步实现 见这个两个URL

有用的话记得点个赞同哈嘿嘿!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/352433.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux Top 命令解析 比较详细

TOP命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况。 TOP是一个动态显示过程,即可以通过用户按键来不断刷新当前状态.如果在前台执行该命令,它将独占前台,直到用户终止该程序为止.比较准确的说,top命令提供了实时的对系统处理器的状态监…

用webstorm在chrome 调试页面时一直弹出 copy authorization url to clipboard

用chrome来调试页面,每次刷新会弹出 requested without authorization, 是因为更新后的bug,可以在Setting - debugger中设置 转载于:https://www.cnblogs.com/dxxzst/p/WebStorm.html

2003 cant connect to MySQL server on 'XXX.XXX.XXX.XXX'

数据库在配置正常并且也配置了mysql 在局域网上互相访问的用户和ip但是会出现2003 cant connect to MySQL server on XXX.XXX.XXX.XXX ,本地机子连接一切正常但是局域网其他机器就是无法连接。通过检测发现是电脑的防火墙问题,关闭防火墙后电脑上的数据库就可以被局…

C++插入中文到mysql乱码

C 插入中文字符到mysql数据库出现乱码,奇怪的是直接在数据库写查询语句直接进行插入,是不会出现乱码 然后就根据一些材料把数据库,得编码形式改为gb2312但是结果仍然乱码中(设置my.ini中的字符集)。 猜想 有可能是C和…

mountain_OS X Mountain Lion上的多个Java版本

mountain在Mountain Lion之前,Java被捆绑在OS X中。似乎在升级期间,我在计算机上安装的Java 6版本被删除了。 显然,在升级过程中卸载Java的原因是Java运行时存在的安全问题。通过这种方式,您不得不安装可解决此安全问题的最新版本…

python手机自动化测试脚本语言_Python+Appium实现APP自动化测试

一、环境准备 1.脚本语言:Python3.x IDE:安装Pycharm 2.安装Java JDK 、Android SDK 3.adb环境,path添加E:\Software\Android_SDK\platform-tools 4.安装Appium for windows,官网地址 http://appium.io/ ​ 点击下载按钮会到GitHu…

Win7无线网络和有线网络网络负载选择

最近在看如何让有线网络和无线网络实现对接。win7网络可以同时连接两个网卡无线和有线,在同时间上连接两个网络用 的是哪个网络,用是哪个流量(可以用currPorts软件来查看电脑用是哪个网络的流量),哪个网络是闲置网络。 同时可以…

怎么查看linux服务器有cpu

cat /proc/cpuinfo中的信息processor 逻辑处理器的id。physical id 物理封装的处理器的id。core id 每个核心的id。cpu cores 位于相同物理封装的处理器中的内核数量。siblings 位于相同物理封装的处理器中的逻辑处理器的数量。1 查看物理CPU的个数#cat /proc/cpuinfo |grep &q…

python条件输出_python基础(二)条件判断、循环、格式化输出

继续上一篇,今天主要总结一下条件判断、循环、格式化输出 一.条件判断 python中条件判断使用if else来判断,多分支的话使用if elif ... else,也就是如果怎么怎么样就怎么怎么样,否则就怎么怎么这样,格式如下: score i…

拼图项目的诅咒:为什么Java 9一遍又一遍地延迟?

JDK 9发行日期推迟到2017年7月 距JDK 9发行不到200天,它又被推迟了 。 新的发布日期已更新为2017年7月,比之前推迟的日期晚了四个月。 推迟日期 9月13日,Oracle Java平台小组的首席架构师Mark Reinhold发表了他的建议,推迟了JDK…

linux下安装maven

1、下载maven安装包 wget http://219.238.7.73/files/211300000CAE3924/mirrors.hust.edu.cn/apache/maven/maven-3/3.5.4/binaries/apache-maven-3.5.4-bin.tar.gz 2、解压缩maven tar -zxvf apache-maven-3.5.4-bin.tar.gz 3、在/etc/profile文件中配置maven环境变量 #maven …

小技巧教你解决此windows副本不是正版的问题

最近有很多朋友都说,在安装完win7系统之后,却出现了“此windows副本不是正版” 的问题,我们该怎么解决这个问题呢?今天就教大家如何解决此windows副本不是正版的问题。 点击左下角的“开始”按钮,然后在搜索框中输入“…

NGINX介绍及参数

Nginx("engine x")是一个IMAP/POP3/SMTP代理服务器,也是一个高性能的 HTTP 和 反向代理服务器,但现在大多数情况下都是用来做静态web服务器和反向代理服务器,在作为反向代理服务器的时候,Nginx可以对后端的real server做负载均衡,基于应用层的负载均衡,但是他仅支持一…

FinalTest 基于web的登录口令修改设计

本次任务主要实现登录口令的修改,当用户修改了登录名和登陆密码以后,下一次登录将会使用新的登录名和登录密码。 FT.1 页面设计 登录的页面主要使用了原来的pass.htm文件,主要是因为我自己做了一个相差不大的界面,如下图所示&…

python脚本编程100例_python100例,python经典例题

肯定有用,练习就是实战。对于刚学习编程的同学,我觉得跟着例子学习,会有很大的进步。至少让你熟悉语法和理解编程的一些技巧。当你能熟练掌握python编程的方法后,你需要学习一些第三方库,python的第三方库很强大。具体…

windows Server 2003 尝试安装.NET Framework 4 失败

在windows Server 2003 尝试安装.NET Framework 4 失败 提示出“产生阻滞问题”,这个是系统没有安装WIC产生的。 到https://www.microsoft.com/zh-cn/download/details.aspx?id17718 下载WIC后进行安装,安装WIC后能正常安装.NET Framework 4。

java 在线编辑器_最好的Markdown开源在线编辑器,没有之一!

点击上方蓝色字体,选择“设为星标”回复”666“获取面试宝典Editor.md 是一款开源的、可嵌入的 Markdown 在线编辑器(组件),基于 CodeMirror、jQuery 和 Marked 构建。主要特性支持“标准” Markdown / CommonMark 和 Github 风格的语法,也可…

log4j 多线程死锁问题_Log4j线程死锁–案例研究

log4j 多线程死锁问题此案例研究描述了影响Weblogic Portal 10.0生产环境的Apache Log4j线程争用问题的完整根本原因分析和解决方案。 它还将展示在开发和支持Java EE应用程序时适当的Java类加载器知识的重要性。 本文也是您提高线程转储分析技能和了解线程竞争条件的另一个机会…

谜题6:多重转型

转型被用来将一个数值从一种类型转换到另一种类型。下面的程序连续使用了三个转型。那么它到底会打印出什么呢? public class Multicast{public static void main (String[] args){ System.out.println((int)(char)(byte) -1); } } 无论你怎样分析这个程序&#xf…

nginx 简介篇

Nginx(发音为“engine x”)是一款由俄罗斯软件工程师Igor Sysoev写的开源的web服务器。自从2004年发布以来nginx一直关注于高性能、高并发、低内存的使用,另外还有一些特色的Web服务器功能,如负载均衡、缓存、访问和带宽控制以及能够有效的与各种应用集成这些特点使…