
网页代码
网站打开速率慢的缘由,排查方式及优化方式
采集交流 • 优采云 发表了文章 • 0 个评论 • 264 次浏览 • 2020-07-26 08:01
如果你的网站打开速率过慢网站打开速度慢 如何优化,而你又不知道该怎么解决,那么这篇文章是非看不可了。手把手的教你怎么排查网站打开慢的缘由,以及优化方式。
排查网站打开速率慢的缘由:
1 网站服务器速率或租用空间所在服务器速率
服务器空间速率是网站打开速率快的硬件基础,也是先决条件。否则纵使你网站页面设计的特别"苗条",网站打开速率也会打折扣。解决办法:要找你的空间商解决或换空间商。
如何测量服务器速率快慢呢?
方法一: ping命令看联接到服务器的时间和丢包情况。
1>单击“开始”键并选择运行;接着在“运行”对话框中输入cmd
注:有的可能是输入command,也有可能有的windows不带DOS系统。
2>键入Ping和您要测试的网址(比如:Ping -t)。然后回车,便得到你访问服务器的回时间。
一般,“PING”命令会手动进行下去,直到你使它中止,如敲“ctrl +C”。如果你熟悉使用Telnet中PING的功能,并且你具有在不同网路上的Telnet账号,你就可以以不同的网路为基础,对其他的主机(IP地址或域名)进行PING的测试,你可以比较在不同的访问点那些被访问主机的回应时间,并得到“丢包率”、平均回应时间等测试结果。
time:显示了信息包抵达远程主机后返回的时间。计算定位为微秒。数值越小速率越快。
lost:丢包情况。
TTL:生存时间 指定数据包被路由器遗弃之前容许通过的网关数目。
一个速率好的机房,首先丢包率不能超过1%,最好是1000个没有一个丢包,这种是最理想的,但是这个不是绝对值,只要高于1%的都属于不错的路由情况了。
其次ping值要小,同城的联通adsl ping平均值绝对不能超过20,一般在10,跨省的adsl ping平均值应当在20-40属于正常。
第三点是ping值要均匀,如果最小的ping值只有4,但是不时的有几十,最大有79的出现,这个就是路由不稳定的表现,同样的联通的adsl,尽管最小也有8,但是最大也只有9,就说明路由稳定。
方法二: 查看登台服务器上其它网站的打开速率。
相同IP地址站点查询网址:
通过前面的查询工具可以看见和自已在同一台服务器上的网站个数和网址。可以瞧瞧其它网站是否打开也慢呢。
2 电信和移动互访困局问题。
如果空间打开的速率时快时慢,甚至有时候打不开,那就是空间不稳定的诱因。要找你的空间商解决或换空间商了;如果是在有的地方打开速率快,有的地方打开速率慢,那应当是网路线路的问题。电信线路用户访问放到移动服务器的网站,联通线路用户访问置于联通服务器上的网站,相对来说打开速率肯定是比较慢。
解决办法:如果选购空间的话,建议订购双线空间或多线空间。这已不是新鲜的概念,大部分的虚拟主机商都有两线或多线空间,价格高一些,但是从用户体验角度来说是物有所值的。
3 从网站本身找问题,网站的问题包括网站程序设计,网页设计结构,网页内容三个部份。
网站程序设计:
1>网页中若果有幻灯片播放疗效的代码,需要审查一下,是否严重拖慢网站打开速率。
2>如果排除各方面缘由,可以找搞程序设计的相关专业人士,查看程序的设计结构是否合理。
网页设计结构:
1>如果是table布局的网站,查看是否嵌套次数多很,或是一个大表格之后分成多个表格这样的网页布局。解决办法:建议用div布局,配合css ,这样除了打开速率快,也有利于更改。
2>如果网站中有统计代码,在线客服或是其它js代码,看看是否放在了网页代码的最前面。解决办法:最好尽可能的放在网页代码最后,当网站代码加载完毕,才执行这种代码。
3>可能有错误的代码
一种情况是查看一下网页代码是否有不存在的图片或文件路径代码。(如上图所示用firebug听到20.jpg这个图片,红色显示表示实际不存在,代码中有调用它的代码)因为本身图片在空间中不存在,可是在执行代码的时侯网站打开速度慢 如何优化,执行到这一行时,却要始终加载这个图片,在细微程度上是会影响到网站的速率的。
另一种情况是从别的网站转抄的特效javascript代码,可能转载不全,有许多网页错误,造成网站打开速率慢。解决办法:修正网站上代码错误。
4>尽量减低javascript的特效的使用。
如:鼠标特效、栏目特效、状态栏特效等,这些特效的原理是先由服务器下载到你本地的机器,然后在本地机器上运行形成,如果观看你网站的网友机器配置低的话,要运行一段时间就能完成。
网页内容:
1>查看网页中是否有许多规格大的图片存在,如果非要图片疗效来抒发的话,可以把大图片切分成多个小图片。图片进行减重处理,可以让字节数显得较小,否则好多的图片会占用好多空间又让网站打开速率显得太慢。可以用photoshop、fireworks等画图软件将图片规格缩小,使图片的质量稍为减少一下,在图片质量和图片大小之间找寻一个最佳的比列。
2>查看网页中是否有规格大的flash文件存在,排除抒发疗效外,尽量少用小型flash。
3>有的同学喜欢在网页中加音乐,用户一打开网站,就有背景音乐播放,这样的事情尽量不要做。
4>内容中过多地引用了其它网站的内容。如引用其他网站的图片或其它内容,如果哪个网站的速率慢,或者那种网站的页面早已不存在了,打开的速率都会更慢。解决办法:这样问题常见的情况是,友情链接交换中图片链接真接链接别的网站的logo图片,建议先把对方的logo图片上传到自已的网站空间中,然后加上链接。第二种情况是许多同学喜欢用iframe嵌套别的网站上的搜索,查ip等小功能模块,建议少用这些方法。
查看网站中图片、代码等加载情况可以用 firefox浏览器的插件工具firebug 工具查看。
优化加载速率的方式:
一、优化图片
几乎没有那个网页上是没有图片的。如果你经历过56K狗的年代,你一定不会很喜欢有大量图片的网站。因为加载那样一个网页会耗费大量的时间。
即使在现今,网络带宽有了好多的提升,56K狗渐渐淡出,优化图片以推动网页速率还是太有必要的。
优化图片包括降低图片数、降低图象质量、使用恰当的格式。
1、减少图片数:去除不必要的图片。
2、降低图象质量:如果不是太必要,尝试减少图象的质量,尤其是jpg格式,降低5%的质量看起来变化不是很大,但文大小的变化是比较大的。
3、常识使用脚本文件取代疗效:
比如一些web2.0的款式,如果使用ps制做,每个图片基本会降低%5-%25的大小成本.
相反,使用javascript代码来实现疗效,仅仅只降低几个字节.
二、图像格式的选择
一般在网页上使用的图片格式有三种,jpg、png、gif。三种格式的具体技术指标不是这篇文章探讨的内容,我们只须要晓得在哪些时侯应当使用哪些格式,以降低网页的加载时间。
1、JPG:一般用于展示景色、人物、艺术照的摄影作品。有时也用在笔记本截屏上。
2、GIF:提供的颜色较少,可用在一些对颜色要求不高的地方,比如网站logo、按钮、表情等等。当然,gif的一个重要的应用是动漫图片。
3、PNG:PNG格式能提供透明背景,是一种专为网页展示而发明的图片格式。一般用于须要背景透明显示或对图象质量要求较高的网页上。
三、优化CSS
CSS叠层样式表使网页加载上去更高效,浏览体验也得到增强。有了CSS,表格布局的形式可以退职了。
但有时我们在写CSS的时侯会使用了一些比较罗嗦的句子,比如这句:
复制内容到剪贴板
代码:
margin-top: 10px;
margin-right: 20px;
margin-bottom: 10px;
margin-left: 20px;
你可以将它简化为:
margin: 10px 20px 10px 20px;
又或则这句:
A paragraph ofdecorated text
Secondparagraph
Thirdparagraph
Forthparagraph
可以用div来包含:
A paragraph of decoratedtext
Secondparagraph
Thirdparagraph
Forthparagraph
四、网址后加斜杠
有些网址,比如当服务器收到这样一个地址恳求的时侯,它须要耗费时间去确定这个地址的文件类型。如果220是一个目录,不妨在网址后多加一个斜杠,让其弄成,这样服务器才能一目了然地晓得要访问该目录下的index或default文件,从而节约了加载时间。
五、标明高度和长度
这点很重要,但很多人因为懒惰或其它缘由,总是将其忽略。当你在网页上添加图片或表格时,你应当指定它们的高度和长度,也就是height和width参数。如果浏览器没有找到这两个参数,它须要一边下载图片一边估算大小,如果图片好多,浏览器须要不断地调整页面。这不但影响速率,也影响浏览体验。
下面是一个比较友好的图片代码:
复制内容到剪贴板
代码:
当浏览器晓得了高度和长度参数后,即使图片暂时未能显示,页面上也会腾出图片的空位,然后继续加载前面的内容。从而加载时间快了,浏览体验也更好了
六、减少http请求
当浏览者打开某个网页,浏览器会发出好多对象恳求(图像、脚本等等),视乎网路延时情况,每个对象加载就会有所延后。如果网页上对象好多,这可以须要耗费大量的时间。
因此,要为http恳求减负。如何减负?
1、去除一些不必要的对象。
2、将临近的两张图片合成一张。
3、合并CSS文件
看看下边这段代码,需要加载三个CSS文件:
我们可以将其合成一个:
从而降低http恳求。
七、其它小技巧
1、去除不必要加载项。
2、如果在网页上嵌入了其它网站的widget,如果有选择余地,一定要选择速率快的。
3、尽量用图片取代flash,这对SEO也有用处。
4、有些内容可以静态化就将其静态化,以降低服务器的负担。
5、统计代码放到页尾(或者使用延迟加载)。 查看全部
排查网站打开速率慢的缘由:
1 网站服务器速率或租用空间所在服务器速率
服务器空间速率是网站打开速率快的硬件基础,也是先决条件。否则纵使你网站页面设计的特别"苗条",网站打开速率也会打折扣。解决办法:要找你的空间商解决或换空间商。
如何测量服务器速率快慢呢?
方法一: ping命令看联接到服务器的时间和丢包情况。
1>单击“开始”键并选择运行;接着在“运行”对话框中输入cmd
注:有的可能是输入command,也有可能有的windows不带DOS系统。
2>键入Ping和您要测试的网址(比如:Ping -t)。然后回车,便得到你访问服务器的回时间。
一般,“PING”命令会手动进行下去,直到你使它中止,如敲“ctrl +C”。如果你熟悉使用Telnet中PING的功能,并且你具有在不同网路上的Telnet账号,你就可以以不同的网路为基础,对其他的主机(IP地址或域名)进行PING的测试,你可以比较在不同的访问点那些被访问主机的回应时间,并得到“丢包率”、平均回应时间等测试结果。
time:显示了信息包抵达远程主机后返回的时间。计算定位为微秒。数值越小速率越快。
lost:丢包情况。
TTL:生存时间 指定数据包被路由器遗弃之前容许通过的网关数目。
一个速率好的机房,首先丢包率不能超过1%,最好是1000个没有一个丢包,这种是最理想的,但是这个不是绝对值,只要高于1%的都属于不错的路由情况了。
其次ping值要小,同城的联通adsl ping平均值绝对不能超过20,一般在10,跨省的adsl ping平均值应当在20-40属于正常。
第三点是ping值要均匀,如果最小的ping值只有4,但是不时的有几十,最大有79的出现,这个就是路由不稳定的表现,同样的联通的adsl,尽管最小也有8,但是最大也只有9,就说明路由稳定。
方法二: 查看登台服务器上其它网站的打开速率。
相同IP地址站点查询网址:
通过前面的查询工具可以看见和自已在同一台服务器上的网站个数和网址。可以瞧瞧其它网站是否打开也慢呢。
2 电信和移动互访困局问题。
如果空间打开的速率时快时慢,甚至有时候打不开,那就是空间不稳定的诱因。要找你的空间商解决或换空间商了;如果是在有的地方打开速率快,有的地方打开速率慢,那应当是网路线路的问题。电信线路用户访问放到移动服务器的网站,联通线路用户访问置于联通服务器上的网站,相对来说打开速率肯定是比较慢。
解决办法:如果选购空间的话,建议订购双线空间或多线空间。这已不是新鲜的概念,大部分的虚拟主机商都有两线或多线空间,价格高一些,但是从用户体验角度来说是物有所值的。
3 从网站本身找问题,网站的问题包括网站程序设计,网页设计结构,网页内容三个部份。
网站程序设计:
1>网页中若果有幻灯片播放疗效的代码,需要审查一下,是否严重拖慢网站打开速率。
2>如果排除各方面缘由,可以找搞程序设计的相关专业人士,查看程序的设计结构是否合理。
网页设计结构:
1>如果是table布局的网站,查看是否嵌套次数多很,或是一个大表格之后分成多个表格这样的网页布局。解决办法:建议用div布局,配合css ,这样除了打开速率快,也有利于更改。
2>如果网站中有统计代码,在线客服或是其它js代码,看看是否放在了网页代码的最前面。解决办法:最好尽可能的放在网页代码最后,当网站代码加载完毕,才执行这种代码。
3>可能有错误的代码
一种情况是查看一下网页代码是否有不存在的图片或文件路径代码。(如上图所示用firebug听到20.jpg这个图片,红色显示表示实际不存在,代码中有调用它的代码)因为本身图片在空间中不存在,可是在执行代码的时侯网站打开速度慢 如何优化,执行到这一行时,却要始终加载这个图片,在细微程度上是会影响到网站的速率的。
另一种情况是从别的网站转抄的特效javascript代码,可能转载不全,有许多网页错误,造成网站打开速率慢。解决办法:修正网站上代码错误。
4>尽量减低javascript的特效的使用。
如:鼠标特效、栏目特效、状态栏特效等,这些特效的原理是先由服务器下载到你本地的机器,然后在本地机器上运行形成,如果观看你网站的网友机器配置低的话,要运行一段时间就能完成。
网页内容:
1>查看网页中是否有许多规格大的图片存在,如果非要图片疗效来抒发的话,可以把大图片切分成多个小图片。图片进行减重处理,可以让字节数显得较小,否则好多的图片会占用好多空间又让网站打开速率显得太慢。可以用photoshop、fireworks等画图软件将图片规格缩小,使图片的质量稍为减少一下,在图片质量和图片大小之间找寻一个最佳的比列。
2>查看网页中是否有规格大的flash文件存在,排除抒发疗效外,尽量少用小型flash。
3>有的同学喜欢在网页中加音乐,用户一打开网站,就有背景音乐播放,这样的事情尽量不要做。
4>内容中过多地引用了其它网站的内容。如引用其他网站的图片或其它内容,如果哪个网站的速率慢,或者那种网站的页面早已不存在了,打开的速率都会更慢。解决办法:这样问题常见的情况是,友情链接交换中图片链接真接链接别的网站的logo图片,建议先把对方的logo图片上传到自已的网站空间中,然后加上链接。第二种情况是许多同学喜欢用iframe嵌套别的网站上的搜索,查ip等小功能模块,建议少用这些方法。
查看网站中图片、代码等加载情况可以用 firefox浏览器的插件工具firebug 工具查看。
优化加载速率的方式:
一、优化图片
几乎没有那个网页上是没有图片的。如果你经历过56K狗的年代,你一定不会很喜欢有大量图片的网站。因为加载那样一个网页会耗费大量的时间。
即使在现今,网络带宽有了好多的提升,56K狗渐渐淡出,优化图片以推动网页速率还是太有必要的。
优化图片包括降低图片数、降低图象质量、使用恰当的格式。
1、减少图片数:去除不必要的图片。
2、降低图象质量:如果不是太必要,尝试减少图象的质量,尤其是jpg格式,降低5%的质量看起来变化不是很大,但文大小的变化是比较大的。
3、常识使用脚本文件取代疗效:
比如一些web2.0的款式,如果使用ps制做,每个图片基本会降低%5-%25的大小成本.
相反,使用javascript代码来实现疗效,仅仅只降低几个字节.
二、图像格式的选择
一般在网页上使用的图片格式有三种,jpg、png、gif。三种格式的具体技术指标不是这篇文章探讨的内容,我们只须要晓得在哪些时侯应当使用哪些格式,以降低网页的加载时间。
1、JPG:一般用于展示景色、人物、艺术照的摄影作品。有时也用在笔记本截屏上。
2、GIF:提供的颜色较少,可用在一些对颜色要求不高的地方,比如网站logo、按钮、表情等等。当然,gif的一个重要的应用是动漫图片。
3、PNG:PNG格式能提供透明背景,是一种专为网页展示而发明的图片格式。一般用于须要背景透明显示或对图象质量要求较高的网页上。
三、优化CSS
CSS叠层样式表使网页加载上去更高效,浏览体验也得到增强。有了CSS,表格布局的形式可以退职了。
但有时我们在写CSS的时侯会使用了一些比较罗嗦的句子,比如这句:
复制内容到剪贴板
代码:
margin-top: 10px;
margin-right: 20px;
margin-bottom: 10px;
margin-left: 20px;
你可以将它简化为:
margin: 10px 20px 10px 20px;
又或则这句:
A paragraph ofdecorated text
Secondparagraph
Thirdparagraph
Forthparagraph
可以用div来包含:
A paragraph of decoratedtext
Secondparagraph
Thirdparagraph
Forthparagraph
四、网址后加斜杠
有些网址,比如当服务器收到这样一个地址恳求的时侯,它须要耗费时间去确定这个地址的文件类型。如果220是一个目录,不妨在网址后多加一个斜杠,让其弄成,这样服务器才能一目了然地晓得要访问该目录下的index或default文件,从而节约了加载时间。
五、标明高度和长度
这点很重要,但很多人因为懒惰或其它缘由,总是将其忽略。当你在网页上添加图片或表格时,你应当指定它们的高度和长度,也就是height和width参数。如果浏览器没有找到这两个参数,它须要一边下载图片一边估算大小,如果图片好多,浏览器须要不断地调整页面。这不但影响速率,也影响浏览体验。
下面是一个比较友好的图片代码:
复制内容到剪贴板
代码:
当浏览器晓得了高度和长度参数后,即使图片暂时未能显示,页面上也会腾出图片的空位,然后继续加载前面的内容。从而加载时间快了,浏览体验也更好了
六、减少http请求
当浏览者打开某个网页,浏览器会发出好多对象恳求(图像、脚本等等),视乎网路延时情况,每个对象加载就会有所延后。如果网页上对象好多,这可以须要耗费大量的时间。
因此,要为http恳求减负。如何减负?
1、去除一些不必要的对象。
2、将临近的两张图片合成一张。
3、合并CSS文件
看看下边这段代码,需要加载三个CSS文件:
我们可以将其合成一个:
从而降低http恳求。
七、其它小技巧
1、去除不必要加载项。
2、如果在网页上嵌入了其它网站的widget,如果有选择余地,一定要选择速率快的。
3、尽量用图片取代flash,这对SEO也有用处。
4、有些内容可以静态化就将其静态化,以降低服务器的负担。
5、统计代码放到页尾(或者使用延迟加载)。 查看全部
如果你的网站打开速率过慢网站打开速度慢 如何优化,而你又不知道该怎么解决,那么这篇文章是非看不可了。手把手的教你怎么排查网站打开慢的缘由,以及优化方式。
排查网站打开速率慢的缘由:
1 网站服务器速率或租用空间所在服务器速率
服务器空间速率是网站打开速率快的硬件基础,也是先决条件。否则纵使你网站页面设计的特别"苗条",网站打开速率也会打折扣。解决办法:要找你的空间商解决或换空间商。
如何测量服务器速率快慢呢?
方法一: ping命令看联接到服务器的时间和丢包情况。
1>单击“开始”键并选择运行;接着在“运行”对话框中输入cmd
注:有的可能是输入command,也有可能有的windows不带DOS系统。
2>键入Ping和您要测试的网址(比如:Ping -t)。然后回车,便得到你访问服务器的回时间。
一般,“PING”命令会手动进行下去,直到你使它中止,如敲“ctrl +C”。如果你熟悉使用Telnet中PING的功能,并且你具有在不同网路上的Telnet账号,你就可以以不同的网路为基础,对其他的主机(IP地址或域名)进行PING的测试,你可以比较在不同的访问点那些被访问主机的回应时间,并得到“丢包率”、平均回应时间等测试结果。
time:显示了信息包抵达远程主机后返回的时间。计算定位为微秒。数值越小速率越快。
lost:丢包情况。
TTL:生存时间 指定数据包被路由器遗弃之前容许通过的网关数目。
一个速率好的机房,首先丢包率不能超过1%,最好是1000个没有一个丢包,这种是最理想的,但是这个不是绝对值,只要高于1%的都属于不错的路由情况了。
其次ping值要小,同城的联通adsl ping平均值绝对不能超过20,一般在10,跨省的adsl ping平均值应当在20-40属于正常。
第三点是ping值要均匀,如果最小的ping值只有4,但是不时的有几十,最大有79的出现,这个就是路由不稳定的表现,同样的联通的adsl,尽管最小也有8,但是最大也只有9,就说明路由稳定。
方法二: 查看登台服务器上其它网站的打开速率。
相同IP地址站点查询网址:
通过前面的查询工具可以看见和自已在同一台服务器上的网站个数和网址。可以瞧瞧其它网站是否打开也慢呢。
2 电信和移动互访困局问题。
如果空间打开的速率时快时慢,甚至有时候打不开,那就是空间不稳定的诱因。要找你的空间商解决或换空间商了;如果是在有的地方打开速率快,有的地方打开速率慢,那应当是网路线路的问题。电信线路用户访问放到移动服务器的网站,联通线路用户访问置于联通服务器上的网站,相对来说打开速率肯定是比较慢。
解决办法:如果选购空间的话,建议订购双线空间或多线空间。这已不是新鲜的概念,大部分的虚拟主机商都有两线或多线空间,价格高一些,但是从用户体验角度来说是物有所值的。
3 从网站本身找问题,网站的问题包括网站程序设计,网页设计结构,网页内容三个部份。
网站程序设计:
1>网页中若果有幻灯片播放疗效的代码,需要审查一下,是否严重拖慢网站打开速率。
2>如果排除各方面缘由,可以找搞程序设计的相关专业人士,查看程序的设计结构是否合理。
网页设计结构:
1>如果是table布局的网站,查看是否嵌套次数多很,或是一个大表格之后分成多个表格这样的网页布局。解决办法:建议用div布局,配合css ,这样除了打开速率快,也有利于更改。
2>如果网站中有统计代码,在线客服或是其它js代码,看看是否放在了网页代码的最前面。解决办法:最好尽可能的放在网页代码最后,当网站代码加载完毕,才执行这种代码。
3>可能有错误的代码
一种情况是查看一下网页代码是否有不存在的图片或文件路径代码。(如上图所示用firebug听到20.jpg这个图片,红色显示表示实际不存在,代码中有调用它的代码)因为本身图片在空间中不存在,可是在执行代码的时侯网站打开速度慢 如何优化,执行到这一行时,却要始终加载这个图片,在细微程度上是会影响到网站的速率的。
另一种情况是从别的网站转抄的特效javascript代码,可能转载不全,有许多网页错误,造成网站打开速率慢。解决办法:修正网站上代码错误。
4>尽量减低javascript的特效的使用。
如:鼠标特效、栏目特效、状态栏特效等,这些特效的原理是先由服务器下载到你本地的机器,然后在本地机器上运行形成,如果观看你网站的网友机器配置低的话,要运行一段时间就能完成。
网页内容:
1>查看网页中是否有许多规格大的图片存在,如果非要图片疗效来抒发的话,可以把大图片切分成多个小图片。图片进行减重处理,可以让字节数显得较小,否则好多的图片会占用好多空间又让网站打开速率显得太慢。可以用photoshop、fireworks等画图软件将图片规格缩小,使图片的质量稍为减少一下,在图片质量和图片大小之间找寻一个最佳的比列。
2>查看网页中是否有规格大的flash文件存在,排除抒发疗效外,尽量少用小型flash。
3>有的同学喜欢在网页中加音乐,用户一打开网站,就有背景音乐播放,这样的事情尽量不要做。
4>内容中过多地引用了其它网站的内容。如引用其他网站的图片或其它内容,如果哪个网站的速率慢,或者那种网站的页面早已不存在了,打开的速率都会更慢。解决办法:这样问题常见的情况是,友情链接交换中图片链接真接链接别的网站的logo图片,建议先把对方的logo图片上传到自已的网站空间中,然后加上链接。第二种情况是许多同学喜欢用iframe嵌套别的网站上的搜索,查ip等小功能模块,建议少用这些方法。
查看网站中图片、代码等加载情况可以用 firefox浏览器的插件工具firebug 工具查看。
优化加载速率的方式:
一、优化图片
几乎没有那个网页上是没有图片的。如果你经历过56K狗的年代,你一定不会很喜欢有大量图片的网站。因为加载那样一个网页会耗费大量的时间。
即使在现今,网络带宽有了好多的提升,56K狗渐渐淡出,优化图片以推动网页速率还是太有必要的。
优化图片包括降低图片数、降低图象质量、使用恰当的格式。
1、减少图片数:去除不必要的图片。
2、降低图象质量:如果不是太必要,尝试减少图象的质量,尤其是jpg格式,降低5%的质量看起来变化不是很大,但文大小的变化是比较大的。
3、常识使用脚本文件取代疗效:
比如一些web2.0的款式,如果使用ps制做,每个图片基本会降低%5-%25的大小成本.
相反,使用javascript代码来实现疗效,仅仅只降低几个字节.
二、图像格式的选择
一般在网页上使用的图片格式有三种,jpg、png、gif。三种格式的具体技术指标不是这篇文章探讨的内容,我们只须要晓得在哪些时侯应当使用哪些格式,以降低网页的加载时间。
1、JPG:一般用于展示景色、人物、艺术照的摄影作品。有时也用在笔记本截屏上。
2、GIF:提供的颜色较少,可用在一些对颜色要求不高的地方,比如网站logo、按钮、表情等等。当然,gif的一个重要的应用是动漫图片。
3、PNG:PNG格式能提供透明背景,是一种专为网页展示而发明的图片格式。一般用于须要背景透明显示或对图象质量要求较高的网页上。
三、优化CSS
CSS叠层样式表使网页加载上去更高效,浏览体验也得到增强。有了CSS,表格布局的形式可以退职了。
但有时我们在写CSS的时侯会使用了一些比较罗嗦的句子,比如这句:
复制内容到剪贴板
代码:
margin-top: 10px;
margin-right: 20px;
margin-bottom: 10px;
margin-left: 20px;
你可以将它简化为:
margin: 10px 20px 10px 20px;
又或则这句:
A paragraph ofdecorated text
Secondparagraph
Thirdparagraph
Forthparagraph
可以用div来包含:
A paragraph of decoratedtext
Secondparagraph
Thirdparagraph
Forthparagraph
四、网址后加斜杠
有些网址,比如当服务器收到这样一个地址恳求的时侯,它须要耗费时间去确定这个地址的文件类型。如果220是一个目录,不妨在网址后多加一个斜杠,让其弄成,这样服务器才能一目了然地晓得要访问该目录下的index或default文件,从而节约了加载时间。
五、标明高度和长度
这点很重要,但很多人因为懒惰或其它缘由,总是将其忽略。当你在网页上添加图片或表格时,你应当指定它们的高度和长度,也就是height和width参数。如果浏览器没有找到这两个参数,它须要一边下载图片一边估算大小,如果图片好多,浏览器须要不断地调整页面。这不但影响速率,也影响浏览体验。
下面是一个比较友好的图片代码:
复制内容到剪贴板
代码:
当浏览器晓得了高度和长度参数后,即使图片暂时未能显示,页面上也会腾出图片的空位,然后继续加载前面的内容。从而加载时间快了,浏览体验也更好了
六、减少http请求
当浏览者打开某个网页,浏览器会发出好多对象恳求(图像、脚本等等),视乎网路延时情况,每个对象加载就会有所延后。如果网页上对象好多,这可以须要耗费大量的时间。
因此,要为http恳求减负。如何减负?
1、去除一些不必要的对象。
2、将临近的两张图片合成一张。
3、合并CSS文件
看看下边这段代码,需要加载三个CSS文件:
我们可以将其合成一个:
从而降低http恳求。
七、其它小技巧
1、去除不必要加载项。
2、如果在网页上嵌入了其它网站的widget,如果有选择余地,一定要选择速率快的。
3、尽量用图片取代flash,这对SEO也有用处。
4、有些内容可以静态化就将其静态化,以降低服务器的负担。
5、统计代码放到页尾(或者使用延迟加载)。
火车头网页正则提取电话 – 火车头正则采集电话
采集交流 • 优采云 发表了文章 • 0 个评论 • 678 次浏览 • 2020-05-25 08:01
话说好长时间不用火车头了。都有点蒙逼忘了。记得曾经用火车头采集论坛做垃圾文章网站,都多少年前的事情了,如今须要采集一些手机号,想想懒得写PHP,有现成的工具为何不用对吧,没毛病。
分分钟搞定,咱们先熟悉一下火车头的规则。
(?<content>[\s\S]*?)
Content //代表内容
? //表示匹配0次或则1次
\s //匹配所有空白字符
\S //匹配所有非空白字符
* //修饰匹配次数为 0 次或任意次
火车头采集手机号的正则:(?<content>1[34578]{1}[0-9]{9})
火车头采集邮箱的正则:(?<content>[\w\-\.]+@[\w\-\.]+\.\w+)
--------------------下方是正则表达式说明。-----------------------
表1.常用的元字符代码说明
. 匹配除换行符以外的任意字符
\w 匹配字母或数字或顿号或汉字
\s 匹配任意的空白符
\d 匹配数字
\b 匹配词组的开始或结束
^ 匹配字符串的开始$匹配字符串的结束
表2.常用的限定符代码/语法说明
* 重复零次或更多次
+ 重复一次或更多次
? 重复零次或一次
{n} 重复n次
{n,} 重复n次或更多次
{n,m} 重复n到m次
表3.常用的反义代码代码/语法说明
\W 匹配任意不是字母,数字,下划线,汉字的字符
\S 匹配任意不是空白符的字符
\D 匹配任意非数字的字符
\B 匹配不是词组开头或结束的位置
[^x] 匹配不仅x以外的任意字符
[^aeiou] 匹配不仅aeiou这几个字母以外的任意字符
常用分组句型
表5.懒惰限定符代码/语法说明
*? 重复任意次,但尽可能少重复
+? 重复1次或更多次,但尽可能少重复
?? 重复0次或1次,但尽可能少重复
{n,m}? 重复n到m次,但尽可能少重复
{n,}? 重复n次以上,但尽可能少重复
表7.尚未详尽讨论的句型代码/语法说明
\a 报案字符(打印它的疗效是笔记本嘀一声)
\b 一般是词组分界位置,但若果在字符类里使用代表退格
\t 制表符火车采集器 手机正则表达式,Tab
\r 回车
\v 竖向制表符
\f 换页符
\n 换行符
\e Escape
\0nn ASCII代码中八进制代码为nn的字符
\xnn ASCII代码中十六进制代码为nn的字符
\unnnn Unicode代码中十六进制代码为nnnn的字符
\cN ASCII控制字符。比如\cC代表Ctrl+C
\A 字符串开头(类似^,但不受处理多行选项的影响)
\Z 字符串结尾或行尾(不受处理多行选项的影响)
\z 字符串结尾(类似$火车采集器 手机正则表达式,但不受处理多行选项的影响)
\G 当前搜索的开头
\p{name} Unicode中命名为name的字符类,例如\p{IsGreek}
(?>exp) 贪婪子表达式(?<x>-<y>exp)平衡组
(?im-nsx:exp) 在子表达式exp中改变处理选项
(?im-nsx) 为表达式旁边的部份改变处理选项
(?(exp)yes|no) 把exp当成零宽正向先行断定,如果在这个位置能匹配,使用yes作为此组的表达式;否则使用no(?(exp)yes)同上,只是使用空表达式作为no
(?(name)yes|no) 假如命名为name的组捕获到了内容,使用yes作为表达式;否则使用no
(?(name)yes) 同上,只是使用空表达式作为no 查看全部
分分钟搞定,咱们先熟悉一下火车头的规则。
(?<content>[\s\S]*?)
Content //代表内容
? //表示匹配0次或则1次
\s //匹配所有空白字符
\S //匹配所有非空白字符
* //修饰匹配次数为 0 次或任意次
火车头采集手机号的正则:(?<content>1[34578]{1}[0-9]{9})
火车头采集邮箱的正则:(?<content>[\w\-\.]+@[\w\-\.]+\.\w+)
--------------------下方是正则表达式说明。-----------------------
表1.常用的元字符代码说明
. 匹配除换行符以外的任意字符
\w 匹配字母或数字或顿号或汉字
\s 匹配任意的空白符
\d 匹配数字
\b 匹配词组的开始或结束
^ 匹配字符串的开始$匹配字符串的结束
表2.常用的限定符代码/语法说明
* 重复零次或更多次
+ 重复一次或更多次
? 重复零次或一次
{n} 重复n次
{n,} 重复n次或更多次
{n,m} 重复n到m次
表3.常用的反义代码代码/语法说明
\W 匹配任意不是字母,数字,下划线,汉字的字符
\S 匹配任意不是空白符的字符
\D 匹配任意非数字的字符
\B 匹配不是词组开头或结束的位置
[^x] 匹配不仅x以外的任意字符
[^aeiou] 匹配不仅aeiou这几个字母以外的任意字符
常用分组句型
表5.懒惰限定符代码/语法说明
*? 重复任意次,但尽可能少重复
+? 重复1次或更多次,但尽可能少重复
?? 重复0次或1次,但尽可能少重复
{n,m}? 重复n到m次,但尽可能少重复
{n,}? 重复n次以上,但尽可能少重复
表7.尚未详尽讨论的句型代码/语法说明
\a 报案字符(打印它的疗效是笔记本嘀一声)
\b 一般是词组分界位置,但若果在字符类里使用代表退格
\t 制表符火车采集器 手机正则表达式,Tab
\r 回车
\v 竖向制表符
\f 换页符
\n 换行符
\e Escape
\0nn ASCII代码中八进制代码为nn的字符
\xnn ASCII代码中十六进制代码为nn的字符
\unnnn Unicode代码中十六进制代码为nnnn的字符
\cN ASCII控制字符。比如\cC代表Ctrl+C
\A 字符串开头(类似^,但不受处理多行选项的影响)
\Z 字符串结尾或行尾(不受处理多行选项的影响)
\z 字符串结尾(类似$火车采集器 手机正则表达式,但不受处理多行选项的影响)
\G 当前搜索的开头
\p{name} Unicode中命名为name的字符类,例如\p{IsGreek}
(?>exp) 贪婪子表达式(?<x>-<y>exp)平衡组
(?im-nsx:exp) 在子表达式exp中改变处理选项
(?im-nsx) 为表达式旁边的部份改变处理选项
(?(exp)yes|no) 把exp当成零宽正向先行断定,如果在这个位置能匹配,使用yes作为此组的表达式;否则使用no(?(exp)yes)同上,只是使用空表达式作为no
(?(name)yes|no) 假如命名为name的组捕获到了内容,使用yes作为表达式;否则使用no
(?(name)yes) 同上,只是使用空表达式作为no 查看全部
话说好长时间不用火车头了。都有点蒙逼忘了。记得曾经用火车头采集论坛做垃圾文章网站,都多少年前的事情了,如今须要采集一些手机号,想想懒得写PHP,有现成的工具为何不用对吧,没毛病。
分分钟搞定,咱们先熟悉一下火车头的规则。
(?<content>[\s\S]*?)
Content //代表内容
? //表示匹配0次或则1次
\s //匹配所有空白字符
\S //匹配所有非空白字符
* //修饰匹配次数为 0 次或任意次
火车头采集手机号的正则:(?<content>1[34578]{1}[0-9]{9})
火车头采集邮箱的正则:(?<content>[\w\-\.]+@[\w\-\.]+\.\w+)
--------------------下方是正则表达式说明。-----------------------
表1.常用的元字符代码说明
. 匹配除换行符以外的任意字符
\w 匹配字母或数字或顿号或汉字
\s 匹配任意的空白符
\d 匹配数字
\b 匹配词组的开始或结束
^ 匹配字符串的开始$匹配字符串的结束
表2.常用的限定符代码/语法说明
* 重复零次或更多次
+ 重复一次或更多次
? 重复零次或一次
{n} 重复n次
{n,} 重复n次或更多次
{n,m} 重复n到m次
表3.常用的反义代码代码/语法说明
\W 匹配任意不是字母,数字,下划线,汉字的字符
\S 匹配任意不是空白符的字符
\D 匹配任意非数字的字符
\B 匹配不是词组开头或结束的位置
[^x] 匹配不仅x以外的任意字符
[^aeiou] 匹配不仅aeiou这几个字母以外的任意字符
常用分组句型
表5.懒惰限定符代码/语法说明
*? 重复任意次,但尽可能少重复
+? 重复1次或更多次,但尽可能少重复
?? 重复0次或1次,但尽可能少重复
{n,m}? 重复n到m次,但尽可能少重复
{n,}? 重复n次以上,但尽可能少重复
表7.尚未详尽讨论的句型代码/语法说明
\a 报案字符(打印它的疗效是笔记本嘀一声)
\b 一般是词组分界位置,但若果在字符类里使用代表退格
\t 制表符火车采集器 手机正则表达式,Tab
\r 回车
\v 竖向制表符
\f 换页符
\n 换行符
\e Escape
\0nn ASCII代码中八进制代码为nn的字符
\xnn ASCII代码中十六进制代码为nn的字符
\unnnn Unicode代码中十六进制代码为nnnn的字符
\cN ASCII控制字符。比如\cC代表Ctrl+C
\A 字符串开头(类似^,但不受处理多行选项的影响)
\Z 字符串结尾或行尾(不受处理多行选项的影响)
\z 字符串结尾(类似$火车采集器 手机正则表达式,但不受处理多行选项的影响)
\G 当前搜索的开头
\p{name} Unicode中命名为name的字符类,例如\p{IsGreek}
(?>exp) 贪婪子表达式(?<x>-<y>exp)平衡组
(?im-nsx:exp) 在子表达式exp中改变处理选项
(?im-nsx) 为表达式旁边的部份改变处理选项
(?(exp)yes|no) 把exp当成零宽正向先行断定,如果在这个位置能匹配,使用yes作为此组的表达式;否则使用no(?(exp)yes)同上,只是使用空表达式作为no
(?(name)yes|no) 假如命名为name的组捕获到了内容,使用yes作为表达式;否则使用no
(?(name)yes) 同上,只是使用空表达式作为no
爬虫基本原理
采集交流 • 优采云 发表了文章 • 0 个评论 • 323 次浏览 • 2020-05-14 08:08
这篇文章的定位是,给有一些python基础,但是对爬虫一无所知的人写的。文中只会涉及到爬虫最核心的部份,完全避免莫名其妙的坑或概念,让读者认为爬虫是一件极其简单的事情,而事实上爬虫确实是一件极其简单的事情(如果你不是以爬虫为工作的话)。
本文分为如下几个部份
简单理解网路爬虫就是手动抓取网页信息的代码,可以简单理解成取代繁杂的复制粘贴操作的手段。
首先必须申明,爬虫的对象必须是你早已听到的网页,比如你不能说你想找到知乎上那个用户的关注人数最多,就希望通过写一个爬虫来帮你爬到答案。你必须明晰地晓得这个人,找到他的主页,然后才会用爬虫来抓取他页面上的信息。
下面我们用一个简单的事例来展示爬虫的工作流程。感觉多数教程第一篇都使用的是豆瓣top250,我们这儿换一个,抓取CSDN首页的文章标题,链接在这里,页面样子是这样的
抓取标题完整代码如下
import requests # 导入网页请求库
from bs4 import BeautifulSoup # 导入网页解析库
# 传入URL
r = requests.get('https://www.csdn.net/')
# 解析URL
soup = BeautifulSoup(r.text, 'html.parser')
content_list = soup.find_all('div', attrs = {'class': 'title'})
for content in content_list:
print(content.h2.a.text)
这样才会复印出所有标题,展示一部分如下
上述过程是一个最简单的完整爬虫流程,可以看出它的功能就是把这些标题复制粘贴到一起,免不仅自动操作的冗长。其实爬虫通常就是做这些事的,比如我们须要用链家的数据进行剖析,看到链家的页面是这样的
我们想获取每位房屋的标题、几室几厅、多少平米、朝向、装修、价格等等数组(即指标),就可以通过爬虫进行定位,自动化抓取这100页所有房屋的那些数组信息。比如100页里有2000个房屋,总共抓取10个数组,爬虫运行结束就可以得到一个2000行10列的excel表格。
注:如果还没有安装里面两个库的读者可以在命令行下分别运行下边两行命令完成安装
pip install requests
pip install beautifulsoup4
知道了爬虫是拿来干哪些的以后,我们来介绍一些最常见到的概念
1.URL
URL英文称为统一资源定位符,其实可以理解成网页的链接,比如前面的就是一个URL。
但是更广义的URL不只是我们常听到的网页资源链接,而是资源在网页中的定位标示。我们一般说的网页是一个资源,网页中加载的每一张图片也是一个资源,它们在互联网中也有惟一的定位URL。比如我们从CSDN网页上随意找一张图片
这个链接就是这个图片资源的定位符,将这个链接输入浏览器中都会显示出这张图片网页爬虫,所以说这张图片也对应一个URL。
不过晓得如此回事就好,我们一般所说的传入URL指的就是把网页的链接传进去。上面代码中
r = requests.get('https://www.csdn.net/')
就是在将URL传入恳求函数。
2.网页恳求
说到网页恳求,就有必要讲一下我们平时浏览网页时,信息交互的模式大约是什么样的。我们平时用浏览器浏览网页的时侯,鼠标点了一个链接,比如你如今点击这儿,其实浏览器帮你向这个网页发送了恳求(request),维护网页的服务器(可以理解为CSDN公司里的一台笔记本,在维护这CSDN上的各个网页)收到了这个恳求,判定这个恳求是有效的,于是返回了一些响应信息(response)到浏览器,浏览器将这种信息进行渲染(可以理解成 处理成人能读懂的样子),就是你看见的网页的样子了。发送恳求与接收恳求的过程就和 发陌陌和收到回复的过程类似。
而如今我们要用代码来模拟滑鼠点击的过程。上面的requests.get就是使代码帮你向这个网页发送了这个恳求,如果恳求被判断为有效,网页的服务器也会把信息传送给你,传送回去的这种信息就被形参到变量r之中。所以这个变量r里就包含有我们想要的信息了,也包括这些我们想要提取的标题。
我们可以print(r.text)看一下上面有哪些东西
我们再看一下网页的源代码(如何读懂这个源码,以及这个源码如何查看下一节HTML会详尽提到)
源代码和r.text虽然是一模一样的东西。r.text虽然就是一个字符串,字符串中有我们刚才抓取到的所有标题,我们只要通过字符串匹配方式(比如正则表达式)将她们提取下来就可以了。这样说是不是觉得爬虫十分简单呢?只要这样傻蛋操作
r = requests.get('https://www.csdn.net/')
再直接从r.text字符串中提取信息即可。其实爬虫就是那么简单。
但是解析是如何回事呢,为什么刚才不直接用正则而要用bs4呢?因为便捷,但是正则也是完全可以的,只是相对麻烦一些、需要写更多的代码而已。
3.网页解析
网页解析虽然就从网页服务器返回给我们的信息中提取我们想要数据的过程。其实使用正则表达式提取我们要的标题的过程也可以称为网页解析。
因为当前绝大多数网页源代码都是用HTML语言写的,而HTML语言时特别有规律性的,比如我们要的所有文章标题都具有相同结构,也就是说它周围的字符串都是十分类似的,这样我们能够批量获取。所以就有大鳄专门封装了怎样从HTML代码中提取特定文本的库,也就是我们平常说的网页解析库,如bs4 lxml pyquery等,其实把她们当作处理字符串的就可以了。
为了更清楚地了解怎样对网页进行解析,我们须要先简略把握HTML代码的结构。
引用维基百科中的一段话来介绍HTML
超文本标记语言(英语:HyperText Markup Language,简称:HTML)是一种用于创建网页的标准标记语言。HTML是一种基础技术,常与CSS、JavaScript一起被诸多网站用于设计令人赏心悦目的网页、网页应用程序以及移动应用程序的用户界面[1]。网页浏览器可以读取HTML文件,并将其渲染成可视化网页。
为了使读者对HTML有更清楚的认识,我们来写一点简单的HTML代码。用文本编辑器(记事本也可以)创建一个名子为a.html的文件,在里面写下如下代码
<!DOCTYPE html>
<html>
<head>
<title>爬虫基本原理</title>
</head>
<body>
<h1>HTML介绍</h1>
<p>第一段</p>
<p>第二段</p>
</body>
</html>
保存,然后你双击这个文件,就会手动用浏览器打开,然后你还能见到下边这个样子的页面
你若果根据我的操作来做的话,你已然创建了一个简单的网页,现在你看见的所有网页都是这样设计的,只是比你的复杂一点而已,不信你去瞧瞧刚刚截图出来的网页源代码图片。
接下来,我们来看一下HTML语言的特性。最重要的一点是网页爬虫,文本都是被标签(h1标签 p标签)夹在中间的,而这种标签都是特定的,有专门用途的。比如<h1>就表示一级标题,包在上面的文本自然会被放大显示;而<p>标签则表示段落。
再看里面的源代码截图,head meta script title div li每一个都是标签,层层嵌套。我们完全不需要晓得总共有什么种标签,也不需要晓得这种标签都是拿来干哪些的,我们只要找到我们要的信息包含在哪些标签里就行了。比如使用正则表达式就直接用<p>(.*?)</p>就可以把上面的内容提取下来了。
但是事实似乎没有这么简单,看里面的截图标签如何是这样的<nav id="nav" class="clearfix">?其实这是一个<nav>标签,后面的id class是这个标签的属性。
为什么要给标签设置属性呢?我们先考虑这样一个问题:我们看见的网页千差万别,文字的颜色字体等都不一样,这是如何设置的呢?答案是使用css样式。
css句子类似这样
h1 {
color: white;
text-align: center;
}
p {
font-family: verdana;
font-size: 20px;
}
即设置对应标签的颜色、字体、大小、居中等。而当有的段落使用这个字体,有的段落使用哪个字体如何办呢?css这样设置
p.test1 {
font-size: 20px;
}
p.test2 {
font-size: 15px;
}
在HTML代码中则这样写
<p class="test1">20px大小的字</p>
<p class="test2">15px大小的字</p>
所以不同属性就是为了分辨相同标签用的,这相当于给标签进行了分类,在统一设计款式上更方便,同时对于我们依照属性定位我们想要内容的位置虽然也是更方便了。这里要说明一下,class id这两个属性比较特殊,用的也最多,所以各自弄了一个快捷键来表示,class用.,id用#。
做爬虫不需要了解刚才编撰的css代码内容放到那里之类的问题,也不需要了解css代码设置了哪些,我们只会和HTML打交道,所以只要理解HTML中属性的作用就可以了。
如果想要更进一步了解HTML和CSS,可以到w3school网站学习。
现在你就早已具备了解析网页须要的全部HTML知识了。我们通常就是依据标签名配合属性值来定位我们想要资源的位置的,其他的都不用管。这时,我们再来看爬虫的解析代码
把上面的代码再粘贴一遍如下
import requests # 导入网页请求库
from bs4 import BeautifulSoup # 导入网页解析库
# 传入URL
r = requests.get('https://www.csdn.net/')
# 解析URL
soup = BeautifulSoup(r.text, 'html.parser')
content_list = soup.find_all('div', attrs = {'class': 'title'})
for content in content_list:
print(content.h2.a.text)
解释一下里面代码的过程
可以看见里面的代码十分简约,思路清晰,读者可以自己想一想假如要用正则表达式怎么匹配那些标签,会发觉代码冗长好多,虽然它也有更快的优势。
那么我们是如何晓得要找寻什么样属性的div标签,为什么要找h2 a标签而不是其他的呢?这就要去剖析网页的源代码了。而这个过程也十分简单。
我们如今用谷歌浏览器打开CSDN这个网站,找一个空白的位置右键-查看网页源代码,这时才会打开一个新的页面这个页面就是这个网站的HTML源代码了,我们可以通过这个页面来看我们要的信息在那里,但是觉得十分不便捷,因为有太多无用的信息做干扰,我们难以快速掌控网页的结构。所以我们可以用另一种形式查看源代码。
用谷歌浏览器打开CSDN这个网站,找一个空白的位置右键-检查,就会弹出一个框,如下图所示
(如果没有听到这个界面,注意要切换到Element中)
这个页面最大的用处是通过折叠来使人更快探求出网页的结构。
其中的这些代码就是HTML代码,该页面的一个个标题就存在这一个个li上面。点击li后面的三角就可以展开具体的代码内容,如下图所示
可以看见文章的标题(打造一个高性能、易落地的公链开发平台)就在这个源代码之中,也就是说在我们刚才获得的r.text字符串之中。而我们代码定位路径也一目了然了,因为每位li上面还会有一个<div class="title">而每一个div上面还会有一个h2 里面有一个a,a中包含我们要的标题名称。所以我们就用find_all找到所有这样的div标签,存储为一个list,再对list进行循环,对每一个元素提取h2 a 再提取标签中的内容。
当然我们也可以find_all最外边的li标签,再一层层往里找,都是一样的。只要找到定位信息的惟一标示(标签或则属性)就可以了。
虽然在这里看源代码可以折叠一些没用的代码,但是虽然还有一些更好用的工具来辅助我们找到我们要的信息在网页源码中的位置。比如下边这个键盘符号。
在所有代码都折叠上去的情况下,点击这个键盘,之后再去点击网页中的元素,浏览器都会手动帮你把你点击的元素选中下来,其实你键盘悬在一个元素前面的时侯,就早已帮你定位了,如下图所示
当我们要爬一个网页的时侯,只须要如下流程
现在,对于一些没有丝毫反爬举措的网站我们都可以游刃有余了。至于抓取多个数组的数据怎么组织在一起、抓取多页(URL有规律的情况下)的代码怎样设计,就不是爬虫知识范畴了,这是用python基础知识就可以解决的。下一系列文章就主要讲这一部分。接下来给几个当前可以练手的网站
如果使用BeautifulSoup的定位的过程中遇见困难,可以直接到网上搜教程,也可以等我们这个专题前面更新的BeautifulSoup详尽介绍。
如果你去抓取其他网站,最好先看一下r.text是不是和网站源代码一模一样,如果不是,说明你对方服务器没有把真正的信息给你,说明他可能看出你是爬虫了(进行网页恳求的时侯,浏览器和requests.get都相当于带着一堆资格证去敲门,对方会检测你这种资格证,浏览器的资格证通常是可以通过的,而代码的资格证就可能不合格,因为代码的资格证可能有一些比较固定的特征,对方服务器预先设定好,资格证是这样的恳求一律拒绝,因为她们一定是爬虫,这就是反爬虫机制),这时就须要懂一些反反爬举措就能获得真正的信息,反反爬方式的学习是一个积累的过程,我们前面再讲。读者假如遇见一些反爬机制,可以到网上查这个网站的爬虫,估计都能查到一些博客讲怎么破解,甚至直接贴出代码。
在这篇的基础上抓取多页以及代码设计的改进看下边这三篇续集
爬虫代码改进(一)
爬虫代码改进(二)
爬虫代码改进(三)
专栏主页:python编程
专栏目录:目录
爬虫目录:爬虫系列目录
版本说明:软件及包版本说明 查看全部
本文分为如下几个部份
简单理解网路爬虫就是手动抓取网页信息的代码,可以简单理解成取代繁杂的复制粘贴操作的手段。
首先必须申明,爬虫的对象必须是你早已听到的网页,比如你不能说你想找到知乎上那个用户的关注人数最多,就希望通过写一个爬虫来帮你爬到答案。你必须明晰地晓得这个人,找到他的主页,然后才会用爬虫来抓取他页面上的信息。
下面我们用一个简单的事例来展示爬虫的工作流程。感觉多数教程第一篇都使用的是豆瓣top250,我们这儿换一个,抓取CSDN首页的文章标题,链接在这里,页面样子是这样的
抓取标题完整代码如下
import requests # 导入网页请求库
from bs4 import BeautifulSoup # 导入网页解析库
# 传入URL
r = requests.get('https://www.csdn.net/')
# 解析URL
soup = BeautifulSoup(r.text, 'html.parser')
content_list = soup.find_all('div', attrs = {'class': 'title'})
for content in content_list:
print(content.h2.a.text)
这样才会复印出所有标题,展示一部分如下
上述过程是一个最简单的完整爬虫流程,可以看出它的功能就是把这些标题复制粘贴到一起,免不仅自动操作的冗长。其实爬虫通常就是做这些事的,比如我们须要用链家的数据进行剖析,看到链家的页面是这样的
我们想获取每位房屋的标题、几室几厅、多少平米、朝向、装修、价格等等数组(即指标),就可以通过爬虫进行定位,自动化抓取这100页所有房屋的那些数组信息。比如100页里有2000个房屋,总共抓取10个数组,爬虫运行结束就可以得到一个2000行10列的excel表格。
注:如果还没有安装里面两个库的读者可以在命令行下分别运行下边两行命令完成安装
pip install requests
pip install beautifulsoup4
知道了爬虫是拿来干哪些的以后,我们来介绍一些最常见到的概念
1.URL
URL英文称为统一资源定位符,其实可以理解成网页的链接,比如前面的就是一个URL。
但是更广义的URL不只是我们常听到的网页资源链接,而是资源在网页中的定位标示。我们一般说的网页是一个资源,网页中加载的每一张图片也是一个资源,它们在互联网中也有惟一的定位URL。比如我们从CSDN网页上随意找一张图片
这个链接就是这个图片资源的定位符,将这个链接输入浏览器中都会显示出这张图片网页爬虫,所以说这张图片也对应一个URL。
不过晓得如此回事就好,我们一般所说的传入URL指的就是把网页的链接传进去。上面代码中
r = requests.get('https://www.csdn.net/')
就是在将URL传入恳求函数。
2.网页恳求
说到网页恳求,就有必要讲一下我们平时浏览网页时,信息交互的模式大约是什么样的。我们平时用浏览器浏览网页的时侯,鼠标点了一个链接,比如你如今点击这儿,其实浏览器帮你向这个网页发送了恳求(request),维护网页的服务器(可以理解为CSDN公司里的一台笔记本,在维护这CSDN上的各个网页)收到了这个恳求,判定这个恳求是有效的,于是返回了一些响应信息(response)到浏览器,浏览器将这种信息进行渲染(可以理解成 处理成人能读懂的样子),就是你看见的网页的样子了。发送恳求与接收恳求的过程就和 发陌陌和收到回复的过程类似。
而如今我们要用代码来模拟滑鼠点击的过程。上面的requests.get就是使代码帮你向这个网页发送了这个恳求,如果恳求被判断为有效,网页的服务器也会把信息传送给你,传送回去的这种信息就被形参到变量r之中。所以这个变量r里就包含有我们想要的信息了,也包括这些我们想要提取的标题。
我们可以print(r.text)看一下上面有哪些东西
我们再看一下网页的源代码(如何读懂这个源码,以及这个源码如何查看下一节HTML会详尽提到)
源代码和r.text虽然是一模一样的东西。r.text虽然就是一个字符串,字符串中有我们刚才抓取到的所有标题,我们只要通过字符串匹配方式(比如正则表达式)将她们提取下来就可以了。这样说是不是觉得爬虫十分简单呢?只要这样傻蛋操作
r = requests.get('https://www.csdn.net/')
再直接从r.text字符串中提取信息即可。其实爬虫就是那么简单。
但是解析是如何回事呢,为什么刚才不直接用正则而要用bs4呢?因为便捷,但是正则也是完全可以的,只是相对麻烦一些、需要写更多的代码而已。
3.网页解析
网页解析虽然就从网页服务器返回给我们的信息中提取我们想要数据的过程。其实使用正则表达式提取我们要的标题的过程也可以称为网页解析。
因为当前绝大多数网页源代码都是用HTML语言写的,而HTML语言时特别有规律性的,比如我们要的所有文章标题都具有相同结构,也就是说它周围的字符串都是十分类似的,这样我们能够批量获取。所以就有大鳄专门封装了怎样从HTML代码中提取特定文本的库,也就是我们平常说的网页解析库,如bs4 lxml pyquery等,其实把她们当作处理字符串的就可以了。
为了更清楚地了解怎样对网页进行解析,我们须要先简略把握HTML代码的结构。
引用维基百科中的一段话来介绍HTML
超文本标记语言(英语:HyperText Markup Language,简称:HTML)是一种用于创建网页的标准标记语言。HTML是一种基础技术,常与CSS、JavaScript一起被诸多网站用于设计令人赏心悦目的网页、网页应用程序以及移动应用程序的用户界面[1]。网页浏览器可以读取HTML文件,并将其渲染成可视化网页。
为了使读者对HTML有更清楚的认识,我们来写一点简单的HTML代码。用文本编辑器(记事本也可以)创建一个名子为a.html的文件,在里面写下如下代码
<!DOCTYPE html>
<html>
<head>
<title>爬虫基本原理</title>
</head>
<body>
<h1>HTML介绍</h1>
<p>第一段</p>
<p>第二段</p>
</body>
</html>
保存,然后你双击这个文件,就会手动用浏览器打开,然后你还能见到下边这个样子的页面
你若果根据我的操作来做的话,你已然创建了一个简单的网页,现在你看见的所有网页都是这样设计的,只是比你的复杂一点而已,不信你去瞧瞧刚刚截图出来的网页源代码图片。
接下来,我们来看一下HTML语言的特性。最重要的一点是网页爬虫,文本都是被标签(h1标签 p标签)夹在中间的,而这种标签都是特定的,有专门用途的。比如<h1>就表示一级标题,包在上面的文本自然会被放大显示;而<p>标签则表示段落。
再看里面的源代码截图,head meta script title div li每一个都是标签,层层嵌套。我们完全不需要晓得总共有什么种标签,也不需要晓得这种标签都是拿来干哪些的,我们只要找到我们要的信息包含在哪些标签里就行了。比如使用正则表达式就直接用<p>(.*?)</p>就可以把上面的内容提取下来了。
但是事实似乎没有这么简单,看里面的截图标签如何是这样的<nav id="nav" class="clearfix">?其实这是一个<nav>标签,后面的id class是这个标签的属性。
为什么要给标签设置属性呢?我们先考虑这样一个问题:我们看见的网页千差万别,文字的颜色字体等都不一样,这是如何设置的呢?答案是使用css样式。
css句子类似这样
h1 {
color: white;
text-align: center;
}
p {
font-family: verdana;
font-size: 20px;
}
即设置对应标签的颜色、字体、大小、居中等。而当有的段落使用这个字体,有的段落使用哪个字体如何办呢?css这样设置
p.test1 {
font-size: 20px;
}
p.test2 {
font-size: 15px;
}
在HTML代码中则这样写
<p class="test1">20px大小的字</p>
<p class="test2">15px大小的字</p>
所以不同属性就是为了分辨相同标签用的,这相当于给标签进行了分类,在统一设计款式上更方便,同时对于我们依照属性定位我们想要内容的位置虽然也是更方便了。这里要说明一下,class id这两个属性比较特殊,用的也最多,所以各自弄了一个快捷键来表示,class用.,id用#。
做爬虫不需要了解刚才编撰的css代码内容放到那里之类的问题,也不需要了解css代码设置了哪些,我们只会和HTML打交道,所以只要理解HTML中属性的作用就可以了。
如果想要更进一步了解HTML和CSS,可以到w3school网站学习。
现在你就早已具备了解析网页须要的全部HTML知识了。我们通常就是依据标签名配合属性值来定位我们想要资源的位置的,其他的都不用管。这时,我们再来看爬虫的解析代码
把上面的代码再粘贴一遍如下
import requests # 导入网页请求库
from bs4 import BeautifulSoup # 导入网页解析库
# 传入URL
r = requests.get('https://www.csdn.net/')
# 解析URL
soup = BeautifulSoup(r.text, 'html.parser')
content_list = soup.find_all('div', attrs = {'class': 'title'})
for content in content_list:
print(content.h2.a.text)
解释一下里面代码的过程
可以看见里面的代码十分简约,思路清晰,读者可以自己想一想假如要用正则表达式怎么匹配那些标签,会发觉代码冗长好多,虽然它也有更快的优势。
那么我们是如何晓得要找寻什么样属性的div标签,为什么要找h2 a标签而不是其他的呢?这就要去剖析网页的源代码了。而这个过程也十分简单。
我们如今用谷歌浏览器打开CSDN这个网站,找一个空白的位置右键-查看网页源代码,这时才会打开一个新的页面这个页面就是这个网站的HTML源代码了,我们可以通过这个页面来看我们要的信息在那里,但是觉得十分不便捷,因为有太多无用的信息做干扰,我们难以快速掌控网页的结构。所以我们可以用另一种形式查看源代码。
用谷歌浏览器打开CSDN这个网站,找一个空白的位置右键-检查,就会弹出一个框,如下图所示
(如果没有听到这个界面,注意要切换到Element中)
这个页面最大的用处是通过折叠来使人更快探求出网页的结构。
其中的这些代码就是HTML代码,该页面的一个个标题就存在这一个个li上面。点击li后面的三角就可以展开具体的代码内容,如下图所示
可以看见文章的标题(打造一个高性能、易落地的公链开发平台)就在这个源代码之中,也就是说在我们刚才获得的r.text字符串之中。而我们代码定位路径也一目了然了,因为每位li上面还会有一个<div class="title">而每一个div上面还会有一个h2 里面有一个a,a中包含我们要的标题名称。所以我们就用find_all找到所有这样的div标签,存储为一个list,再对list进行循环,对每一个元素提取h2 a 再提取标签中的内容。
当然我们也可以find_all最外边的li标签,再一层层往里找,都是一样的。只要找到定位信息的惟一标示(标签或则属性)就可以了。
虽然在这里看源代码可以折叠一些没用的代码,但是虽然还有一些更好用的工具来辅助我们找到我们要的信息在网页源码中的位置。比如下边这个键盘符号。
在所有代码都折叠上去的情况下,点击这个键盘,之后再去点击网页中的元素,浏览器都会手动帮你把你点击的元素选中下来,其实你键盘悬在一个元素前面的时侯,就早已帮你定位了,如下图所示
当我们要爬一个网页的时侯,只须要如下流程
现在,对于一些没有丝毫反爬举措的网站我们都可以游刃有余了。至于抓取多个数组的数据怎么组织在一起、抓取多页(URL有规律的情况下)的代码怎样设计,就不是爬虫知识范畴了,这是用python基础知识就可以解决的。下一系列文章就主要讲这一部分。接下来给几个当前可以练手的网站
如果使用BeautifulSoup的定位的过程中遇见困难,可以直接到网上搜教程,也可以等我们这个专题前面更新的BeautifulSoup详尽介绍。
如果你去抓取其他网站,最好先看一下r.text是不是和网站源代码一模一样,如果不是,说明你对方服务器没有把真正的信息给你,说明他可能看出你是爬虫了(进行网页恳求的时侯,浏览器和requests.get都相当于带着一堆资格证去敲门,对方会检测你这种资格证,浏览器的资格证通常是可以通过的,而代码的资格证就可能不合格,因为代码的资格证可能有一些比较固定的特征,对方服务器预先设定好,资格证是这样的恳求一律拒绝,因为她们一定是爬虫,这就是反爬虫机制),这时就须要懂一些反反爬举措就能获得真正的信息,反反爬方式的学习是一个积累的过程,我们前面再讲。读者假如遇见一些反爬机制,可以到网上查这个网站的爬虫,估计都能查到一些博客讲怎么破解,甚至直接贴出代码。
在这篇的基础上抓取多页以及代码设计的改进看下边这三篇续集
爬虫代码改进(一)
爬虫代码改进(二)
爬虫代码改进(三)
专栏主页:python编程
专栏目录:目录
爬虫目录:爬虫系列目录
版本说明:软件及包版本说明 查看全部
这篇文章的定位是,给有一些python基础,但是对爬虫一无所知的人写的。文中只会涉及到爬虫最核心的部份,完全避免莫名其妙的坑或概念,让读者认为爬虫是一件极其简单的事情,而事实上爬虫确实是一件极其简单的事情(如果你不是以爬虫为工作的话)。
本文分为如下几个部份
简单理解网路爬虫就是手动抓取网页信息的代码,可以简单理解成取代繁杂的复制粘贴操作的手段。
首先必须申明,爬虫的对象必须是你早已听到的网页,比如你不能说你想找到知乎上那个用户的关注人数最多,就希望通过写一个爬虫来帮你爬到答案。你必须明晰地晓得这个人,找到他的主页,然后才会用爬虫来抓取他页面上的信息。
下面我们用一个简单的事例来展示爬虫的工作流程。感觉多数教程第一篇都使用的是豆瓣top250,我们这儿换一个,抓取CSDN首页的文章标题,链接在这里,页面样子是这样的

抓取标题完整代码如下
import requests # 导入网页请求库
from bs4 import BeautifulSoup # 导入网页解析库
# 传入URL
r = requests.get('https://www.csdn.net/')
# 解析URL
soup = BeautifulSoup(r.text, 'html.parser')
content_list = soup.find_all('div', attrs = {'class': 'title'})
for content in content_list:
print(content.h2.a.text)
这样才会复印出所有标题,展示一部分如下

上述过程是一个最简单的完整爬虫流程,可以看出它的功能就是把这些标题复制粘贴到一起,免不仅自动操作的冗长。其实爬虫通常就是做这些事的,比如我们须要用链家的数据进行剖析,看到链家的页面是这样的

我们想获取每位房屋的标题、几室几厅、多少平米、朝向、装修、价格等等数组(即指标),就可以通过爬虫进行定位,自动化抓取这100页所有房屋的那些数组信息。比如100页里有2000个房屋,总共抓取10个数组,爬虫运行结束就可以得到一个2000行10列的excel表格。
注:如果还没有安装里面两个库的读者可以在命令行下分别运行下边两行命令完成安装
pip install requests
pip install beautifulsoup4
知道了爬虫是拿来干哪些的以后,我们来介绍一些最常见到的概念
1.URL
URL英文称为统一资源定位符,其实可以理解成网页的链接,比如前面的就是一个URL。
但是更广义的URL不只是我们常听到的网页资源链接,而是资源在网页中的定位标示。我们一般说的网页是一个资源,网页中加载的每一张图片也是一个资源,它们在互联网中也有惟一的定位URL。比如我们从CSDN网页上随意找一张图片

这个链接就是这个图片资源的定位符,将这个链接输入浏览器中都会显示出这张图片网页爬虫,所以说这张图片也对应一个URL。
不过晓得如此回事就好,我们一般所说的传入URL指的就是把网页的链接传进去。上面代码中
r = requests.get('https://www.csdn.net/')
就是在将URL传入恳求函数。
2.网页恳求
说到网页恳求,就有必要讲一下我们平时浏览网页时,信息交互的模式大约是什么样的。我们平时用浏览器浏览网页的时侯,鼠标点了一个链接,比如你如今点击这儿,其实浏览器帮你向这个网页发送了恳求(request),维护网页的服务器(可以理解为CSDN公司里的一台笔记本,在维护这CSDN上的各个网页)收到了这个恳求,判定这个恳求是有效的,于是返回了一些响应信息(response)到浏览器,浏览器将这种信息进行渲染(可以理解成 处理成人能读懂的样子),就是你看见的网页的样子了。发送恳求与接收恳求的过程就和 发陌陌和收到回复的过程类似。
而如今我们要用代码来模拟滑鼠点击的过程。上面的requests.get就是使代码帮你向这个网页发送了这个恳求,如果恳求被判断为有效,网页的服务器也会把信息传送给你,传送回去的这种信息就被形参到变量r之中。所以这个变量r里就包含有我们想要的信息了,也包括这些我们想要提取的标题。
我们可以print(r.text)看一下上面有哪些东西

我们再看一下网页的源代码(如何读懂这个源码,以及这个源码如何查看下一节HTML会详尽提到)

源代码和r.text虽然是一模一样的东西。r.text虽然就是一个字符串,字符串中有我们刚才抓取到的所有标题,我们只要通过字符串匹配方式(比如正则表达式)将她们提取下来就可以了。这样说是不是觉得爬虫十分简单呢?只要这样傻蛋操作
r = requests.get('https://www.csdn.net/')
再直接从r.text字符串中提取信息即可。其实爬虫就是那么简单。
但是解析是如何回事呢,为什么刚才不直接用正则而要用bs4呢?因为便捷,但是正则也是完全可以的,只是相对麻烦一些、需要写更多的代码而已。
3.网页解析
网页解析虽然就从网页服务器返回给我们的信息中提取我们想要数据的过程。其实使用正则表达式提取我们要的标题的过程也可以称为网页解析。
因为当前绝大多数网页源代码都是用HTML语言写的,而HTML语言时特别有规律性的,比如我们要的所有文章标题都具有相同结构,也就是说它周围的字符串都是十分类似的,这样我们能够批量获取。所以就有大鳄专门封装了怎样从HTML代码中提取特定文本的库,也就是我们平常说的网页解析库,如bs4 lxml pyquery等,其实把她们当作处理字符串的就可以了。
为了更清楚地了解怎样对网页进行解析,我们须要先简略把握HTML代码的结构。
引用维基百科中的一段话来介绍HTML
超文本标记语言(英语:HyperText Markup Language,简称:HTML)是一种用于创建网页的标准标记语言。HTML是一种基础技术,常与CSS、JavaScript一起被诸多网站用于设计令人赏心悦目的网页、网页应用程序以及移动应用程序的用户界面[1]。网页浏览器可以读取HTML文件,并将其渲染成可视化网页。
为了使读者对HTML有更清楚的认识,我们来写一点简单的HTML代码。用文本编辑器(记事本也可以)创建一个名子为a.html的文件,在里面写下如下代码
<!DOCTYPE html>
<html>
<head>
<title>爬虫基本原理</title>
</head>
<body>
<h1>HTML介绍</h1>
<p>第一段</p>
<p>第二段</p>
</body>
</html>
保存,然后你双击这个文件,就会手动用浏览器打开,然后你还能见到下边这个样子的页面

你若果根据我的操作来做的话,你已然创建了一个简单的网页,现在你看见的所有网页都是这样设计的,只是比你的复杂一点而已,不信你去瞧瞧刚刚截图出来的网页源代码图片。
接下来,我们来看一下HTML语言的特性。最重要的一点是网页爬虫,文本都是被标签(h1标签 p标签)夹在中间的,而这种标签都是特定的,有专门用途的。比如<h1>就表示一级标题,包在上面的文本自然会被放大显示;而<p>标签则表示段落。
再看里面的源代码截图,head meta script title div li每一个都是标签,层层嵌套。我们完全不需要晓得总共有什么种标签,也不需要晓得这种标签都是拿来干哪些的,我们只要找到我们要的信息包含在哪些标签里就行了。比如使用正则表达式就直接用<p>(.*?)</p>就可以把上面的内容提取下来了。
但是事实似乎没有这么简单,看里面的截图标签如何是这样的<nav id="nav" class="clearfix">?其实这是一个<nav>标签,后面的id class是这个标签的属性。
为什么要给标签设置属性呢?我们先考虑这样一个问题:我们看见的网页千差万别,文字的颜色字体等都不一样,这是如何设置的呢?答案是使用css样式。
css句子类似这样
h1 {
color: white;
text-align: center;
}
p {
font-family: verdana;
font-size: 20px;
}
即设置对应标签的颜色、字体、大小、居中等。而当有的段落使用这个字体,有的段落使用哪个字体如何办呢?css这样设置
p.test1 {
font-size: 20px;
}
p.test2 {
font-size: 15px;
}
在HTML代码中则这样写
<p class="test1">20px大小的字</p>
<p class="test2">15px大小的字</p>
所以不同属性就是为了分辨相同标签用的,这相当于给标签进行了分类,在统一设计款式上更方便,同时对于我们依照属性定位我们想要内容的位置虽然也是更方便了。这里要说明一下,class id这两个属性比较特殊,用的也最多,所以各自弄了一个快捷键来表示,class用.,id用#。
做爬虫不需要了解刚才编撰的css代码内容放到那里之类的问题,也不需要了解css代码设置了哪些,我们只会和HTML打交道,所以只要理解HTML中属性的作用就可以了。
如果想要更进一步了解HTML和CSS,可以到w3school网站学习。
现在你就早已具备了解析网页须要的全部HTML知识了。我们通常就是依据标签名配合属性值来定位我们想要资源的位置的,其他的都不用管。这时,我们再来看爬虫的解析代码
把上面的代码再粘贴一遍如下
import requests # 导入网页请求库
from bs4 import BeautifulSoup # 导入网页解析库
# 传入URL
r = requests.get('https://www.csdn.net/')
# 解析URL
soup = BeautifulSoup(r.text, 'html.parser')
content_list = soup.find_all('div', attrs = {'class': 'title'})
for content in content_list:
print(content.h2.a.text)
解释一下里面代码的过程
可以看见里面的代码十分简约,思路清晰,读者可以自己想一想假如要用正则表达式怎么匹配那些标签,会发觉代码冗长好多,虽然它也有更快的优势。
那么我们是如何晓得要找寻什么样属性的div标签,为什么要找h2 a标签而不是其他的呢?这就要去剖析网页的源代码了。而这个过程也十分简单。
我们如今用谷歌浏览器打开CSDN这个网站,找一个空白的位置右键-查看网页源代码,这时才会打开一个新的页面这个页面就是这个网站的HTML源代码了,我们可以通过这个页面来看我们要的信息在那里,但是觉得十分不便捷,因为有太多无用的信息做干扰,我们难以快速掌控网页的结构。所以我们可以用另一种形式查看源代码。
用谷歌浏览器打开CSDN这个网站,找一个空白的位置右键-检查,就会弹出一个框,如下图所示

(如果没有听到这个界面,注意要切换到Element中)
这个页面最大的用处是通过折叠来使人更快探求出网页的结构。
其中的这些代码就是HTML代码,该页面的一个个标题就存在这一个个li上面。点击li后面的三角就可以展开具体的代码内容,如下图所示

可以看见文章的标题(打造一个高性能、易落地的公链开发平台)就在这个源代码之中,也就是说在我们刚才获得的r.text字符串之中。而我们代码定位路径也一目了然了,因为每位li上面还会有一个<div class="title">而每一个div上面还会有一个h2 里面有一个a,a中包含我们要的标题名称。所以我们就用find_all找到所有这样的div标签,存储为一个list,再对list进行循环,对每一个元素提取h2 a 再提取标签中的内容。
当然我们也可以find_all最外边的li标签,再一层层往里找,都是一样的。只要找到定位信息的惟一标示(标签或则属性)就可以了。
虽然在这里看源代码可以折叠一些没用的代码,但是虽然还有一些更好用的工具来辅助我们找到我们要的信息在网页源码中的位置。比如下边这个键盘符号。

在所有代码都折叠上去的情况下,点击这个键盘,之后再去点击网页中的元素,浏览器都会手动帮你把你点击的元素选中下来,其实你键盘悬在一个元素前面的时侯,就早已帮你定位了,如下图所示

当我们要爬一个网页的时侯,只须要如下流程
现在,对于一些没有丝毫反爬举措的网站我们都可以游刃有余了。至于抓取多个数组的数据怎么组织在一起、抓取多页(URL有规律的情况下)的代码怎样设计,就不是爬虫知识范畴了,这是用python基础知识就可以解决的。下一系列文章就主要讲这一部分。接下来给几个当前可以练手的网站
如果使用BeautifulSoup的定位的过程中遇见困难,可以直接到网上搜教程,也可以等我们这个专题前面更新的BeautifulSoup详尽介绍。
如果你去抓取其他网站,最好先看一下r.text是不是和网站源代码一模一样,如果不是,说明你对方服务器没有把真正的信息给你,说明他可能看出你是爬虫了(进行网页恳求的时侯,浏览器和requests.get都相当于带着一堆资格证去敲门,对方会检测你这种资格证,浏览器的资格证通常是可以通过的,而代码的资格证就可能不合格,因为代码的资格证可能有一些比较固定的特征,对方服务器预先设定好,资格证是这样的恳求一律拒绝,因为她们一定是爬虫,这就是反爬虫机制),这时就须要懂一些反反爬举措就能获得真正的信息,反反爬方式的学习是一个积累的过程,我们前面再讲。读者假如遇见一些反爬机制,可以到网上查这个网站的爬虫,估计都能查到一些博客讲怎么破解,甚至直接贴出代码。
在这篇的基础上抓取多页以及代码设计的改进看下边这三篇续集
爬虫代码改进(一)
爬虫代码改进(二)
爬虫代码改进(三)
专栏主页:python编程
专栏目录:目录
爬虫目录:爬虫系列目录
版本说明:软件及包版本说明
DISCUZ X3.2 采集教程 – 火车头采集器 V7.6 WEB发布配置管理
采集交流 • 优采云 发表了文章 • 0 个评论 • 827 次浏览 • 2020-04-23 11:04
一般做站的人基本上都晓得采集,尤其是做站群或则做峰会的人。但是现今网上的采集工具基本上都是收费的。而且不光软件收费,采集规则还收费。真是羊绒一把把的薅啊。像火车头这个软件,现在早已到 v9 了,但是精典款还是 v7.6 ,至于为何,你们自己心中应当有数。一般采集内容你们就会,直接定义起始点和结束点就可以了。而火车头带的这个 Web发布配置管理就有点麻烦了。本教程针对的是 Discuz X3.2 / X3.3 / X3.4
1. 打开WEB发布配置管理
打开火车头采集器 v7.6 - 工具 - Web发布配置管理
2. 新建规则
3. 网站自动登入配置
弹出一个新窗口,我们一个一个配置,先来这个登入配置,点击手动抓取登录数据包
4. 获取发布数据包
在以后弹出的窗口中输入 Discuz 论坛的地址(Forece 用的本地测试),然后登录你注册过的用户。在 Post 数据框那儿应当可以看见数据,然后点击确定。当然若果有的网站无法使用手动登入获取 POST 数据的话,你可以用 Fiddler 来获取 Post 数据。然后在上一个窗口中,选择粘贴 Post 数据。
Post 数据通常是长这个样的:
fastloginfield=username&username=forece&password=xxxxxxxxxxxxxx&quickforward=yes&handlekey=ls
复制代码
点击确定后,你可以听到大部分表格都早已填写完毕了
我们还须要再做一下更改,需要将 username 和 password 的表单值改为 [用户名] 和 [密码],另外还须要加一个登录失败标志码码和登录成功标志码。
登陆失败标志码
登录失败
登陆成功标志码
<script type="text/javascript" reload="1">
复制代码
最后截图如下:
5. 网页随机值获取
然后我们步入下一个 Tab ,网页随机值获取。获取这个数值的诱因是因为 Discuz 有一个称作 formhash 的东西。这玩意还不是固定的,每次都变。
然后依次填入以下数据:
获取页面:
/forum.php?mod=post&action=newthread&fid=2
复制代码
来源页面
/forum.php?mod=post&action=newthread&fid=2
复制代码
随机值前字符串
name="formhash" value="
复制代码
随机值后字符串
然后将 每次恳求都使用第一次获取的网页随机值 的选项关闭。
PS: 获取页面和来源页面是你发布贴子的页面。大家听到我旁边的 fid=2 是我的版块名称,请依照自己 Discuz 论坛的情况配置。
最后设置截图如下:
6. 内容发布参数
内容发布参数的设置和登录的有点类似,也是须要获取 Post 数据
登陆进峰会 - 选择发贴 - 填写标题 - 内容 - 按发贴 - 获取 Post 数据 - 按确定
Post 数据应当是这样的:
formhash=9c552f8e&posttime=1507576154&wysiwyg=1&subject=%E7%81%AB%E8%BD%A6%E5%A4%B4%E8%8E%B7%E5%8F%96+Post+%E6%95%B0%E6%8D%AE%E6%B5%8B%E8%AF%95%E5%B8%96&message=by+Forece&replycredit_extcredits=0&replycredit_times=1&replycredit_membertimes=1&replycredit_random=100&readperm=&price=&tags=&rushreplyfrom=&rushreplyto=&rewardfloor=&replylimit=&stopfloor=&creditlimit=&allownoticeauthor=1&usesig=1&save=
复制代码
按完确定后,表单数据获取完毕,我们还是须要更改一些表单。
formhash: [网页随机值1] posttime: [系统时间戳] subject: [标签:标题] message: [标签:内容]
发表错误标志码
抱歉,您的恳求来路不正确或表单验证串不符,无法递交
抱歉,您仍未输入标题或内容
成功标志码
帖子地址复制成功
最后截图如下:
7. HTML 转换为 UBB 标签
其实到现今这个Web发布规则早已配置完毕,但是由于 Discuz 用的是 UBB 标签而不是 HTML 标签,所以我们再稍为让这个发布规则更完美一些。进入中级功能,选择操作类型,标签填写 [标签:内容] ,CMS 选择 Discuz , 按确定。
然后回到内容发布规则里,将表单message里面的值替换成{0}
8. 命名规则
9. 保存配置
按照自己的情况来配置,是 UTF-8 就填写 UTF-8,是 GBK 就填写 GBK 别搞混了。
PS: 不知道为何保存完规则后网页随机值消失不见了,我测试的时侯仍然未能发布内容,重新把网页随机值加进去就好了。 查看全部
1. 打开WEB发布配置管理
打开火车头采集器 v7.6 - 工具 - Web发布配置管理
2. 新建规则
3. 网站自动登入配置
弹出一个新窗口,我们一个一个配置,先来这个登入配置,点击手动抓取登录数据包
4. 获取发布数据包
在以后弹出的窗口中输入 Discuz 论坛的地址(Forece 用的本地测试),然后登录你注册过的用户。在 Post 数据框那儿应当可以看见数据,然后点击确定。当然若果有的网站无法使用手动登入获取 POST 数据的话,你可以用 Fiddler 来获取 Post 数据。然后在上一个窗口中,选择粘贴 Post 数据。
Post 数据通常是长这个样的:
fastloginfield=username&username=forece&password=xxxxxxxxxxxxxx&quickforward=yes&handlekey=ls
复制代码
点击确定后,你可以听到大部分表格都早已填写完毕了
我们还须要再做一下更改,需要将 username 和 password 的表单值改为 [用户名] 和 [密码],另外还须要加一个登录失败标志码码和登录成功标志码。
登陆失败标志码
登录失败
登陆成功标志码
<script type="text/javascript" reload="1">
复制代码
最后截图如下:
5. 网页随机值获取
然后我们步入下一个 Tab ,网页随机值获取。获取这个数值的诱因是因为 Discuz 有一个称作 formhash 的东西。这玩意还不是固定的,每次都变。
然后依次填入以下数据:
获取页面:
/forum.php?mod=post&action=newthread&fid=2
复制代码
来源页面
/forum.php?mod=post&action=newthread&fid=2
复制代码
随机值前字符串
name="formhash" value="
复制代码
随机值后字符串
然后将 每次恳求都使用第一次获取的网页随机值 的选项关闭。
PS: 获取页面和来源页面是你发布贴子的页面。大家听到我旁边的 fid=2 是我的版块名称,请依照自己 Discuz 论坛的情况配置。
最后设置截图如下:
6. 内容发布参数
内容发布参数的设置和登录的有点类似,也是须要获取 Post 数据
登陆进峰会 - 选择发贴 - 填写标题 - 内容 - 按发贴 - 获取 Post 数据 - 按确定
Post 数据应当是这样的:
formhash=9c552f8e&posttime=1507576154&wysiwyg=1&subject=%E7%81%AB%E8%BD%A6%E5%A4%B4%E8%8E%B7%E5%8F%96+Post+%E6%95%B0%E6%8D%AE%E6%B5%8B%E8%AF%95%E5%B8%96&message=by+Forece&replycredit_extcredits=0&replycredit_times=1&replycredit_membertimes=1&replycredit_random=100&readperm=&price=&tags=&rushreplyfrom=&rushreplyto=&rewardfloor=&replylimit=&stopfloor=&creditlimit=&allownoticeauthor=1&usesig=1&save=
复制代码
按完确定后,表单数据获取完毕,我们还是须要更改一些表单。
formhash: [网页随机值1] posttime: [系统时间戳] subject: [标签:标题] message: [标签:内容]
发表错误标志码
抱歉,您的恳求来路不正确或表单验证串不符,无法递交
抱歉,您仍未输入标题或内容
成功标志码
帖子地址复制成功
最后截图如下:
7. HTML 转换为 UBB 标签
其实到现今这个Web发布规则早已配置完毕,但是由于 Discuz 用的是 UBB 标签而不是 HTML 标签,所以我们再稍为让这个发布规则更完美一些。进入中级功能,选择操作类型,标签填写 [标签:内容] ,CMS 选择 Discuz , 按确定。
然后回到内容发布规则里,将表单message里面的值替换成{0}
8. 命名规则
9. 保存配置
按照自己的情况来配置,是 UTF-8 就填写 UTF-8,是 GBK 就填写 GBK 别搞混了。
PS: 不知道为何保存完规则后网页随机值消失不见了,我测试的时侯仍然未能发布内容,重新把网页随机值加进去就好了。 查看全部
一般做站的人基本上都晓得采集,尤其是做站群或则做峰会的人。但是现今网上的采集工具基本上都是收费的。而且不光软件收费,采集规则还收费。真是羊绒一把把的薅啊。像火车头这个软件,现在早已到 v9 了,但是精典款还是 v7.6 ,至于为何,你们自己心中应当有数。一般采集内容你们就会,直接定义起始点和结束点就可以了。而火车头带的这个 Web发布配置管理就有点麻烦了。本教程针对的是 Discuz X3.2 / X3.3 / X3.4
1. 打开WEB发布配置管理
打开火车头采集器 v7.6 - 工具 - Web发布配置管理

2. 新建规则

3. 网站自动登入配置
弹出一个新窗口,我们一个一个配置,先来这个登入配置,点击手动抓取登录数据包

4. 获取发布数据包
在以后弹出的窗口中输入 Discuz 论坛的地址(Forece 用的本地测试),然后登录你注册过的用户。在 Post 数据框那儿应当可以看见数据,然后点击确定。当然若果有的网站无法使用手动登入获取 POST 数据的话,你可以用 Fiddler 来获取 Post 数据。然后在上一个窗口中,选择粘贴 Post 数据。

Post 数据通常是长这个样的:
fastloginfield=username&username=forece&password=xxxxxxxxxxxxxx&quickforward=yes&handlekey=ls
复制代码
点击确定后,你可以听到大部分表格都早已填写完毕了

我们还须要再做一下更改,需要将 username 和 password 的表单值改为 [用户名] 和 [密码],另外还须要加一个登录失败标志码码和登录成功标志码。
登陆失败标志码
登录失败
登陆成功标志码
<script type="text/javascript" reload="1">
复制代码
最后截图如下:

5. 网页随机值获取
然后我们步入下一个 Tab ,网页随机值获取。获取这个数值的诱因是因为 Discuz 有一个称作 formhash 的东西。这玩意还不是固定的,每次都变。

然后依次填入以下数据:
获取页面:
/forum.php?mod=post&action=newthread&fid=2
复制代码
来源页面
/forum.php?mod=post&action=newthread&fid=2
复制代码
随机值前字符串
name="formhash" value="
复制代码
随机值后字符串
然后将 每次恳求都使用第一次获取的网页随机值 的选项关闭。
PS: 获取页面和来源页面是你发布贴子的页面。大家听到我旁边的 fid=2 是我的版块名称,请依照自己 Discuz 论坛的情况配置。
最后设置截图如下:

6. 内容发布参数
内容发布参数的设置和登录的有点类似,也是须要获取 Post 数据

登陆进峰会 - 选择发贴 - 填写标题 - 内容 - 按发贴 - 获取 Post 数据 - 按确定

Post 数据应当是这样的:
formhash=9c552f8e&posttime=1507576154&wysiwyg=1&subject=%E7%81%AB%E8%BD%A6%E5%A4%B4%E8%8E%B7%E5%8F%96+Post+%E6%95%B0%E6%8D%AE%E6%B5%8B%E8%AF%95%E5%B8%96&message=by+Forece&replycredit_extcredits=0&replycredit_times=1&replycredit_membertimes=1&replycredit_random=100&readperm=&price=&tags=&rushreplyfrom=&rushreplyto=&rewardfloor=&replylimit=&stopfloor=&creditlimit=&allownoticeauthor=1&usesig=1&save=
复制代码
按完确定后,表单数据获取完毕,我们还是须要更改一些表单。


formhash: [网页随机值1] posttime: [系统时间戳] subject: [标签:标题] message: [标签:内容]
发表错误标志码
抱歉,您的恳求来路不正确或表单验证串不符,无法递交
抱歉,您仍未输入标题或内容
成功标志码
帖子地址复制成功
最后截图如下:

7. HTML 转换为 UBB 标签
其实到现今这个Web发布规则早已配置完毕,但是由于 Discuz 用的是 UBB 标签而不是 HTML 标签,所以我们再稍为让这个发布规则更完美一些。进入中级功能,选择操作类型,标签填写 [标签:内容] ,CMS 选择 Discuz , 按确定。

然后回到内容发布规则里,将表单message里面的值替换成{0}

8. 命名规则

9. 保存配置
按照自己的情况来配置,是 UTF-8 就填写 UTF-8,是 GBK 就填写 GBK 别搞混了。

PS: 不知道为何保存完规则后网页随机值消失不见了,我测试的时侯仍然未能发布内容,重新把网页随机值加进去就好了。
1. 打开WEB发布配置管理
打开火车头采集器 v7.6 - 工具 - Web发布配置管理

2. 新建规则

3. 网站自动登入配置
弹出一个新窗口,我们一个一个配置,先来这个登入配置,点击手动抓取登录数据包

4. 获取发布数据包
在以后弹出的窗口中输入 Discuz 论坛的地址(Forece 用的本地测试),然后登录你注册过的用户。在 Post 数据框那儿应当可以看见数据,然后点击确定。当然若果有的网站无法使用手动登入获取 POST 数据的话,你可以用 Fiddler 来获取 Post 数据。然后在上一个窗口中,选择粘贴 Post 数据。

Post 数据通常是长这个样的:
fastloginfield=username&username=forece&password=xxxxxxxxxxxxxx&quickforward=yes&handlekey=ls
复制代码
点击确定后,你可以听到大部分表格都早已填写完毕了

我们还须要再做一下更改,需要将 username 和 password 的表单值改为 [用户名] 和 [密码],另外还须要加一个登录失败标志码码和登录成功标志码。
登陆失败标志码
登录失败
登陆成功标志码
<script type="text/javascript" reload="1">
复制代码
最后截图如下:

5. 网页随机值获取
然后我们步入下一个 Tab ,网页随机值获取。获取这个数值的诱因是因为 Discuz 有一个称作 formhash 的东西。这玩意还不是固定的,每次都变。

然后依次填入以下数据:
获取页面:
/forum.php?mod=post&action=newthread&fid=2
复制代码
来源页面
/forum.php?mod=post&action=newthread&fid=2
复制代码
随机值前字符串
name="formhash" value="
复制代码
随机值后字符串
然后将 每次恳求都使用第一次获取的网页随机值 的选项关闭。
PS: 获取页面和来源页面是你发布贴子的页面。大家听到我旁边的 fid=2 是我的版块名称,请依照自己 Discuz 论坛的情况配置。
最后设置截图如下:

6. 内容发布参数
内容发布参数的设置和登录的有点类似,也是须要获取 Post 数据

登陆进峰会 - 选择发贴 - 填写标题 - 内容 - 按发贴 - 获取 Post 数据 - 按确定

Post 数据应当是这样的:
formhash=9c552f8e&posttime=1507576154&wysiwyg=1&subject=%E7%81%AB%E8%BD%A6%E5%A4%B4%E8%8E%B7%E5%8F%96+Post+%E6%95%B0%E6%8D%AE%E6%B5%8B%E8%AF%95%E5%B8%96&message=by+Forece&replycredit_extcredits=0&replycredit_times=1&replycredit_membertimes=1&replycredit_random=100&readperm=&price=&tags=&rushreplyfrom=&rushreplyto=&rewardfloor=&replylimit=&stopfloor=&creditlimit=&allownoticeauthor=1&usesig=1&save=
复制代码
按完确定后,表单数据获取完毕,我们还是须要更改一些表单。


formhash: [网页随机值1] posttime: [系统时间戳] subject: [标签:标题] message: [标签:内容]
发表错误标志码
抱歉,您的恳求来路不正确或表单验证串不符,无法递交
抱歉,您仍未输入标题或内容
成功标志码
帖子地址复制成功
最后截图如下:

7. HTML 转换为 UBB 标签
其实到现今这个Web发布规则早已配置完毕,但是由于 Discuz 用的是 UBB 标签而不是 HTML 标签,所以我们再稍为让这个发布规则更完美一些。进入中级功能,选择操作类型,标签填写 [标签:内容] ,CMS 选择 Discuz , 按确定。

然后回到内容发布规则里,将表单message里面的值替换成{0}

8. 命名规则

9. 保存配置
按照自己的情况来配置,是 UTF-8 就填写 UTF-8,是 GBK 就填写 GBK 别搞混了。

PS: 不知道为何保存完规则后网页随机值消失不见了,我测试的时侯仍然未能发布内容,重新把网页随机值加进去就好了。
网站打开速率慢的缘由,排查方式及优化方式
采集交流 • 优采云 发表了文章 • 0 个评论 • 264 次浏览 • 2020-07-26 08:01
如果你的网站打开速率过慢网站打开速度慢 如何优化,而你又不知道该怎么解决,那么这篇文章是非看不可了。手把手的教你怎么排查网站打开慢的缘由,以及优化方式。
排查网站打开速率慢的缘由:
1 网站服务器速率或租用空间所在服务器速率
服务器空间速率是网站打开速率快的硬件基础,也是先决条件。否则纵使你网站页面设计的特别"苗条",网站打开速率也会打折扣。解决办法:要找你的空间商解决或换空间商。
如何测量服务器速率快慢呢?
方法一: ping命令看联接到服务器的时间和丢包情况。
1>单击“开始”键并选择运行;接着在“运行”对话框中输入cmd
注:有的可能是输入command,也有可能有的windows不带DOS系统。
2>键入Ping和您要测试的网址(比如:Ping -t)。然后回车,便得到你访问服务器的回时间。
一般,“PING”命令会手动进行下去,直到你使它中止,如敲“ctrl +C”。如果你熟悉使用Telnet中PING的功能,并且你具有在不同网路上的Telnet账号,你就可以以不同的网路为基础,对其他的主机(IP地址或域名)进行PING的测试,你可以比较在不同的访问点那些被访问主机的回应时间,并得到“丢包率”、平均回应时间等测试结果。
time:显示了信息包抵达远程主机后返回的时间。计算定位为微秒。数值越小速率越快。
lost:丢包情况。
TTL:生存时间 指定数据包被路由器遗弃之前容许通过的网关数目。
一个速率好的机房,首先丢包率不能超过1%,最好是1000个没有一个丢包,这种是最理想的,但是这个不是绝对值,只要高于1%的都属于不错的路由情况了。
其次ping值要小,同城的联通adsl ping平均值绝对不能超过20,一般在10,跨省的adsl ping平均值应当在20-40属于正常。
第三点是ping值要均匀,如果最小的ping值只有4,但是不时的有几十,最大有79的出现,这个就是路由不稳定的表现,同样的联通的adsl,尽管最小也有8,但是最大也只有9,就说明路由稳定。
方法二: 查看登台服务器上其它网站的打开速率。
相同IP地址站点查询网址:
通过前面的查询工具可以看见和自已在同一台服务器上的网站个数和网址。可以瞧瞧其它网站是否打开也慢呢。
2 电信和移动互访困局问题。
如果空间打开的速率时快时慢,甚至有时候打不开,那就是空间不稳定的诱因。要找你的空间商解决或换空间商了;如果是在有的地方打开速率快,有的地方打开速率慢,那应当是网路线路的问题。电信线路用户访问放到移动服务器的网站,联通线路用户访问置于联通服务器上的网站,相对来说打开速率肯定是比较慢。
解决办法:如果选购空间的话,建议订购双线空间或多线空间。这已不是新鲜的概念,大部分的虚拟主机商都有两线或多线空间,价格高一些,但是从用户体验角度来说是物有所值的。
3 从网站本身找问题,网站的问题包括网站程序设计,网页设计结构,网页内容三个部份。
网站程序设计:
1>网页中若果有幻灯片播放疗效的代码,需要审查一下,是否严重拖慢网站打开速率。
2>如果排除各方面缘由,可以找搞程序设计的相关专业人士,查看程序的设计结构是否合理。
网页设计结构:
1>如果是table布局的网站,查看是否嵌套次数多很,或是一个大表格之后分成多个表格这样的网页布局。解决办法:建议用div布局,配合css ,这样除了打开速率快,也有利于更改。
2>如果网站中有统计代码,在线客服或是其它js代码,看看是否放在了网页代码的最前面。解决办法:最好尽可能的放在网页代码最后,当网站代码加载完毕,才执行这种代码。
3>可能有错误的代码
一种情况是查看一下网页代码是否有不存在的图片或文件路径代码。(如上图所示用firebug听到20.jpg这个图片,红色显示表示实际不存在,代码中有调用它的代码)因为本身图片在空间中不存在,可是在执行代码的时侯网站打开速度慢 如何优化,执行到这一行时,却要始终加载这个图片,在细微程度上是会影响到网站的速率的。
另一种情况是从别的网站转抄的特效javascript代码,可能转载不全,有许多网页错误,造成网站打开速率慢。解决办法:修正网站上代码错误。
4>尽量减低javascript的特效的使用。
如:鼠标特效、栏目特效、状态栏特效等,这些特效的原理是先由服务器下载到你本地的机器,然后在本地机器上运行形成,如果观看你网站的网友机器配置低的话,要运行一段时间就能完成。
网页内容:
1>查看网页中是否有许多规格大的图片存在,如果非要图片疗效来抒发的话,可以把大图片切分成多个小图片。图片进行减重处理,可以让字节数显得较小,否则好多的图片会占用好多空间又让网站打开速率显得太慢。可以用photoshop、fireworks等画图软件将图片规格缩小,使图片的质量稍为减少一下,在图片质量和图片大小之间找寻一个最佳的比列。
2>查看网页中是否有规格大的flash文件存在,排除抒发疗效外,尽量少用小型flash。
3>有的同学喜欢在网页中加音乐,用户一打开网站,就有背景音乐播放,这样的事情尽量不要做。
4>内容中过多地引用了其它网站的内容。如引用其他网站的图片或其它内容,如果哪个网站的速率慢,或者那种网站的页面早已不存在了,打开的速率都会更慢。解决办法:这样问题常见的情况是,友情链接交换中图片链接真接链接别的网站的logo图片,建议先把对方的logo图片上传到自已的网站空间中,然后加上链接。第二种情况是许多同学喜欢用iframe嵌套别的网站上的搜索,查ip等小功能模块,建议少用这些方法。
查看网站中图片、代码等加载情况可以用 firefox浏览器的插件工具firebug 工具查看。
优化加载速率的方式:
一、优化图片
几乎没有那个网页上是没有图片的。如果你经历过56K狗的年代,你一定不会很喜欢有大量图片的网站。因为加载那样一个网页会耗费大量的时间。
即使在现今,网络带宽有了好多的提升,56K狗渐渐淡出,优化图片以推动网页速率还是太有必要的。
优化图片包括降低图片数、降低图象质量、使用恰当的格式。
1、减少图片数:去除不必要的图片。
2、降低图象质量:如果不是太必要,尝试减少图象的质量,尤其是jpg格式,降低5%的质量看起来变化不是很大,但文大小的变化是比较大的。
3、常识使用脚本文件取代疗效:
比如一些web2.0的款式,如果使用ps制做,每个图片基本会降低%5-%25的大小成本.
相反,使用javascript代码来实现疗效,仅仅只降低几个字节.
二、图像格式的选择
一般在网页上使用的图片格式有三种,jpg、png、gif。三种格式的具体技术指标不是这篇文章探讨的内容,我们只须要晓得在哪些时侯应当使用哪些格式,以降低网页的加载时间。
1、JPG:一般用于展示景色、人物、艺术照的摄影作品。有时也用在笔记本截屏上。
2、GIF:提供的颜色较少,可用在一些对颜色要求不高的地方,比如网站logo、按钮、表情等等。当然,gif的一个重要的应用是动漫图片。
3、PNG:PNG格式能提供透明背景,是一种专为网页展示而发明的图片格式。一般用于须要背景透明显示或对图象质量要求较高的网页上。
三、优化CSS
CSS叠层样式表使网页加载上去更高效,浏览体验也得到增强。有了CSS,表格布局的形式可以退职了。
但有时我们在写CSS的时侯会使用了一些比较罗嗦的句子,比如这句:
复制内容到剪贴板
代码:
margin-top: 10px;
margin-right: 20px;
margin-bottom: 10px;
margin-left: 20px;
你可以将它简化为:
margin: 10px 20px 10px 20px;
又或则这句:
A paragraph ofdecorated text
Secondparagraph
Thirdparagraph
Forthparagraph
可以用div来包含:
A paragraph of decoratedtext
Secondparagraph
Thirdparagraph
Forthparagraph
四、网址后加斜杠
有些网址,比如当服务器收到这样一个地址恳求的时侯,它须要耗费时间去确定这个地址的文件类型。如果220是一个目录,不妨在网址后多加一个斜杠,让其弄成,这样服务器才能一目了然地晓得要访问该目录下的index或default文件,从而节约了加载时间。
五、标明高度和长度
这点很重要,但很多人因为懒惰或其它缘由,总是将其忽略。当你在网页上添加图片或表格时,你应当指定它们的高度和长度,也就是height和width参数。如果浏览器没有找到这两个参数,它须要一边下载图片一边估算大小,如果图片好多,浏览器须要不断地调整页面。这不但影响速率,也影响浏览体验。
下面是一个比较友好的图片代码:
复制内容到剪贴板
代码:
当浏览器晓得了高度和长度参数后,即使图片暂时未能显示,页面上也会腾出图片的空位,然后继续加载前面的内容。从而加载时间快了,浏览体验也更好了
六、减少http请求
当浏览者打开某个网页,浏览器会发出好多对象恳求(图像、脚本等等),视乎网路延时情况,每个对象加载就会有所延后。如果网页上对象好多,这可以须要耗费大量的时间。
因此,要为http恳求减负。如何减负?
1、去除一些不必要的对象。
2、将临近的两张图片合成一张。
3、合并CSS文件
看看下边这段代码,需要加载三个CSS文件:
我们可以将其合成一个:
从而降低http恳求。
七、其它小技巧
1、去除不必要加载项。
2、如果在网页上嵌入了其它网站的widget,如果有选择余地,一定要选择速率快的。
3、尽量用图片取代flash,这对SEO也有用处。
4、有些内容可以静态化就将其静态化,以降低服务器的负担。
5、统计代码放到页尾(或者使用延迟加载)。 查看全部
排查网站打开速率慢的缘由:
1 网站服务器速率或租用空间所在服务器速率
服务器空间速率是网站打开速率快的硬件基础,也是先决条件。否则纵使你网站页面设计的特别"苗条",网站打开速率也会打折扣。解决办法:要找你的空间商解决或换空间商。
如何测量服务器速率快慢呢?
方法一: ping命令看联接到服务器的时间和丢包情况。
1>单击“开始”键并选择运行;接着在“运行”对话框中输入cmd
注:有的可能是输入command,也有可能有的windows不带DOS系统。
2>键入Ping和您要测试的网址(比如:Ping -t)。然后回车,便得到你访问服务器的回时间。
一般,“PING”命令会手动进行下去,直到你使它中止,如敲“ctrl +C”。如果你熟悉使用Telnet中PING的功能,并且你具有在不同网路上的Telnet账号,你就可以以不同的网路为基础,对其他的主机(IP地址或域名)进行PING的测试,你可以比较在不同的访问点那些被访问主机的回应时间,并得到“丢包率”、平均回应时间等测试结果。
time:显示了信息包抵达远程主机后返回的时间。计算定位为微秒。数值越小速率越快。
lost:丢包情况。
TTL:生存时间 指定数据包被路由器遗弃之前容许通过的网关数目。
一个速率好的机房,首先丢包率不能超过1%,最好是1000个没有一个丢包,这种是最理想的,但是这个不是绝对值,只要高于1%的都属于不错的路由情况了。
其次ping值要小,同城的联通adsl ping平均值绝对不能超过20,一般在10,跨省的adsl ping平均值应当在20-40属于正常。
第三点是ping值要均匀,如果最小的ping值只有4,但是不时的有几十,最大有79的出现,这个就是路由不稳定的表现,同样的联通的adsl,尽管最小也有8,但是最大也只有9,就说明路由稳定。
方法二: 查看登台服务器上其它网站的打开速率。
相同IP地址站点查询网址:
通过前面的查询工具可以看见和自已在同一台服务器上的网站个数和网址。可以瞧瞧其它网站是否打开也慢呢。
2 电信和移动互访困局问题。
如果空间打开的速率时快时慢,甚至有时候打不开,那就是空间不稳定的诱因。要找你的空间商解决或换空间商了;如果是在有的地方打开速率快,有的地方打开速率慢,那应当是网路线路的问题。电信线路用户访问放到移动服务器的网站,联通线路用户访问置于联通服务器上的网站,相对来说打开速率肯定是比较慢。
解决办法:如果选购空间的话,建议订购双线空间或多线空间。这已不是新鲜的概念,大部分的虚拟主机商都有两线或多线空间,价格高一些,但是从用户体验角度来说是物有所值的。
3 从网站本身找问题,网站的问题包括网站程序设计,网页设计结构,网页内容三个部份。
网站程序设计:
1>网页中若果有幻灯片播放疗效的代码,需要审查一下,是否严重拖慢网站打开速率。
2>如果排除各方面缘由,可以找搞程序设计的相关专业人士,查看程序的设计结构是否合理。
网页设计结构:
1>如果是table布局的网站,查看是否嵌套次数多很,或是一个大表格之后分成多个表格这样的网页布局。解决办法:建议用div布局,配合css ,这样除了打开速率快,也有利于更改。
2>如果网站中有统计代码,在线客服或是其它js代码,看看是否放在了网页代码的最前面。解决办法:最好尽可能的放在网页代码最后,当网站代码加载完毕,才执行这种代码。
3>可能有错误的代码
一种情况是查看一下网页代码是否有不存在的图片或文件路径代码。(如上图所示用firebug听到20.jpg这个图片,红色显示表示实际不存在,代码中有调用它的代码)因为本身图片在空间中不存在,可是在执行代码的时侯网站打开速度慢 如何优化,执行到这一行时,却要始终加载这个图片,在细微程度上是会影响到网站的速率的。
另一种情况是从别的网站转抄的特效javascript代码,可能转载不全,有许多网页错误,造成网站打开速率慢。解决办法:修正网站上代码错误。
4>尽量减低javascript的特效的使用。
如:鼠标特效、栏目特效、状态栏特效等,这些特效的原理是先由服务器下载到你本地的机器,然后在本地机器上运行形成,如果观看你网站的网友机器配置低的话,要运行一段时间就能完成。
网页内容:
1>查看网页中是否有许多规格大的图片存在,如果非要图片疗效来抒发的话,可以把大图片切分成多个小图片。图片进行减重处理,可以让字节数显得较小,否则好多的图片会占用好多空间又让网站打开速率显得太慢。可以用photoshop、fireworks等画图软件将图片规格缩小,使图片的质量稍为减少一下,在图片质量和图片大小之间找寻一个最佳的比列。
2>查看网页中是否有规格大的flash文件存在,排除抒发疗效外,尽量少用小型flash。
3>有的同学喜欢在网页中加音乐,用户一打开网站,就有背景音乐播放,这样的事情尽量不要做。
4>内容中过多地引用了其它网站的内容。如引用其他网站的图片或其它内容,如果哪个网站的速率慢,或者那种网站的页面早已不存在了,打开的速率都会更慢。解决办法:这样问题常见的情况是,友情链接交换中图片链接真接链接别的网站的logo图片,建议先把对方的logo图片上传到自已的网站空间中,然后加上链接。第二种情况是许多同学喜欢用iframe嵌套别的网站上的搜索,查ip等小功能模块,建议少用这些方法。
查看网站中图片、代码等加载情况可以用 firefox浏览器的插件工具firebug 工具查看。
优化加载速率的方式:
一、优化图片
几乎没有那个网页上是没有图片的。如果你经历过56K狗的年代,你一定不会很喜欢有大量图片的网站。因为加载那样一个网页会耗费大量的时间。
即使在现今,网络带宽有了好多的提升,56K狗渐渐淡出,优化图片以推动网页速率还是太有必要的。
优化图片包括降低图片数、降低图象质量、使用恰当的格式。
1、减少图片数:去除不必要的图片。
2、降低图象质量:如果不是太必要,尝试减少图象的质量,尤其是jpg格式,降低5%的质量看起来变化不是很大,但文大小的变化是比较大的。
3、常识使用脚本文件取代疗效:
比如一些web2.0的款式,如果使用ps制做,每个图片基本会降低%5-%25的大小成本.
相反,使用javascript代码来实现疗效,仅仅只降低几个字节.
二、图像格式的选择
一般在网页上使用的图片格式有三种,jpg、png、gif。三种格式的具体技术指标不是这篇文章探讨的内容,我们只须要晓得在哪些时侯应当使用哪些格式,以降低网页的加载时间。
1、JPG:一般用于展示景色、人物、艺术照的摄影作品。有时也用在笔记本截屏上。
2、GIF:提供的颜色较少,可用在一些对颜色要求不高的地方,比如网站logo、按钮、表情等等。当然,gif的一个重要的应用是动漫图片。
3、PNG:PNG格式能提供透明背景,是一种专为网页展示而发明的图片格式。一般用于须要背景透明显示或对图象质量要求较高的网页上。
三、优化CSS
CSS叠层样式表使网页加载上去更高效,浏览体验也得到增强。有了CSS,表格布局的形式可以退职了。
但有时我们在写CSS的时侯会使用了一些比较罗嗦的句子,比如这句:
复制内容到剪贴板
代码:
margin-top: 10px;
margin-right: 20px;
margin-bottom: 10px;
margin-left: 20px;
你可以将它简化为:
margin: 10px 20px 10px 20px;
又或则这句:
A paragraph ofdecorated text
Secondparagraph
Thirdparagraph
Forthparagraph
可以用div来包含:
A paragraph of decoratedtext
Secondparagraph
Thirdparagraph
Forthparagraph
四、网址后加斜杠
有些网址,比如当服务器收到这样一个地址恳求的时侯,它须要耗费时间去确定这个地址的文件类型。如果220是一个目录,不妨在网址后多加一个斜杠,让其弄成,这样服务器才能一目了然地晓得要访问该目录下的index或default文件,从而节约了加载时间。
五、标明高度和长度
这点很重要,但很多人因为懒惰或其它缘由,总是将其忽略。当你在网页上添加图片或表格时,你应当指定它们的高度和长度,也就是height和width参数。如果浏览器没有找到这两个参数,它须要一边下载图片一边估算大小,如果图片好多,浏览器须要不断地调整页面。这不但影响速率,也影响浏览体验。
下面是一个比较友好的图片代码:
复制内容到剪贴板
代码:
当浏览器晓得了高度和长度参数后,即使图片暂时未能显示,页面上也会腾出图片的空位,然后继续加载前面的内容。从而加载时间快了,浏览体验也更好了
六、减少http请求
当浏览者打开某个网页,浏览器会发出好多对象恳求(图像、脚本等等),视乎网路延时情况,每个对象加载就会有所延后。如果网页上对象好多,这可以须要耗费大量的时间。
因此,要为http恳求减负。如何减负?
1、去除一些不必要的对象。
2、将临近的两张图片合成一张。
3、合并CSS文件
看看下边这段代码,需要加载三个CSS文件:
我们可以将其合成一个:
从而降低http恳求。
七、其它小技巧
1、去除不必要加载项。
2、如果在网页上嵌入了其它网站的widget,如果有选择余地,一定要选择速率快的。
3、尽量用图片取代flash,这对SEO也有用处。
4、有些内容可以静态化就将其静态化,以降低服务器的负担。
5、统计代码放到页尾(或者使用延迟加载)。 查看全部
如果你的网站打开速率过慢网站打开速度慢 如何优化,而你又不知道该怎么解决,那么这篇文章是非看不可了。手把手的教你怎么排查网站打开慢的缘由,以及优化方式。
排查网站打开速率慢的缘由:
1 网站服务器速率或租用空间所在服务器速率
服务器空间速率是网站打开速率快的硬件基础,也是先决条件。否则纵使你网站页面设计的特别"苗条",网站打开速率也会打折扣。解决办法:要找你的空间商解决或换空间商。
如何测量服务器速率快慢呢?
方法一: ping命令看联接到服务器的时间和丢包情况。
1>单击“开始”键并选择运行;接着在“运行”对话框中输入cmd
注:有的可能是输入command,也有可能有的windows不带DOS系统。
2>键入Ping和您要测试的网址(比如:Ping -t)。然后回车,便得到你访问服务器的回时间。
一般,“PING”命令会手动进行下去,直到你使它中止,如敲“ctrl +C”。如果你熟悉使用Telnet中PING的功能,并且你具有在不同网路上的Telnet账号,你就可以以不同的网路为基础,对其他的主机(IP地址或域名)进行PING的测试,你可以比较在不同的访问点那些被访问主机的回应时间,并得到“丢包率”、平均回应时间等测试结果。
time:显示了信息包抵达远程主机后返回的时间。计算定位为微秒。数值越小速率越快。
lost:丢包情况。
TTL:生存时间 指定数据包被路由器遗弃之前容许通过的网关数目。
一个速率好的机房,首先丢包率不能超过1%,最好是1000个没有一个丢包,这种是最理想的,但是这个不是绝对值,只要高于1%的都属于不错的路由情况了。
其次ping值要小,同城的联通adsl ping平均值绝对不能超过20,一般在10,跨省的adsl ping平均值应当在20-40属于正常。
第三点是ping值要均匀,如果最小的ping值只有4,但是不时的有几十,最大有79的出现,这个就是路由不稳定的表现,同样的联通的adsl,尽管最小也有8,但是最大也只有9,就说明路由稳定。
方法二: 查看登台服务器上其它网站的打开速率。
相同IP地址站点查询网址:
通过前面的查询工具可以看见和自已在同一台服务器上的网站个数和网址。可以瞧瞧其它网站是否打开也慢呢。
2 电信和移动互访困局问题。
如果空间打开的速率时快时慢,甚至有时候打不开,那就是空间不稳定的诱因。要找你的空间商解决或换空间商了;如果是在有的地方打开速率快,有的地方打开速率慢,那应当是网路线路的问题。电信线路用户访问放到移动服务器的网站,联通线路用户访问置于联通服务器上的网站,相对来说打开速率肯定是比较慢。
解决办法:如果选购空间的话,建议订购双线空间或多线空间。这已不是新鲜的概念,大部分的虚拟主机商都有两线或多线空间,价格高一些,但是从用户体验角度来说是物有所值的。
3 从网站本身找问题,网站的问题包括网站程序设计,网页设计结构,网页内容三个部份。
网站程序设计:
1>网页中若果有幻灯片播放疗效的代码,需要审查一下,是否严重拖慢网站打开速率。
2>如果排除各方面缘由,可以找搞程序设计的相关专业人士,查看程序的设计结构是否合理。
网页设计结构:
1>如果是table布局的网站,查看是否嵌套次数多很,或是一个大表格之后分成多个表格这样的网页布局。解决办法:建议用div布局,配合css ,这样除了打开速率快,也有利于更改。
2>如果网站中有统计代码,在线客服或是其它js代码,看看是否放在了网页代码的最前面。解决办法:最好尽可能的放在网页代码最后,当网站代码加载完毕,才执行这种代码。
3>可能有错误的代码
一种情况是查看一下网页代码是否有不存在的图片或文件路径代码。(如上图所示用firebug听到20.jpg这个图片,红色显示表示实际不存在,代码中有调用它的代码)因为本身图片在空间中不存在,可是在执行代码的时侯网站打开速度慢 如何优化,执行到这一行时,却要始终加载这个图片,在细微程度上是会影响到网站的速率的。
另一种情况是从别的网站转抄的特效javascript代码,可能转载不全,有许多网页错误,造成网站打开速率慢。解决办法:修正网站上代码错误。
4>尽量减低javascript的特效的使用。
如:鼠标特效、栏目特效、状态栏特效等,这些特效的原理是先由服务器下载到你本地的机器,然后在本地机器上运行形成,如果观看你网站的网友机器配置低的话,要运行一段时间就能完成。
网页内容:
1>查看网页中是否有许多规格大的图片存在,如果非要图片疗效来抒发的话,可以把大图片切分成多个小图片。图片进行减重处理,可以让字节数显得较小,否则好多的图片会占用好多空间又让网站打开速率显得太慢。可以用photoshop、fireworks等画图软件将图片规格缩小,使图片的质量稍为减少一下,在图片质量和图片大小之间找寻一个最佳的比列。
2>查看网页中是否有规格大的flash文件存在,排除抒发疗效外,尽量少用小型flash。
3>有的同学喜欢在网页中加音乐,用户一打开网站,就有背景音乐播放,这样的事情尽量不要做。
4>内容中过多地引用了其它网站的内容。如引用其他网站的图片或其它内容,如果哪个网站的速率慢,或者那种网站的页面早已不存在了,打开的速率都会更慢。解决办法:这样问题常见的情况是,友情链接交换中图片链接真接链接别的网站的logo图片,建议先把对方的logo图片上传到自已的网站空间中,然后加上链接。第二种情况是许多同学喜欢用iframe嵌套别的网站上的搜索,查ip等小功能模块,建议少用这些方法。
查看网站中图片、代码等加载情况可以用 firefox浏览器的插件工具firebug 工具查看。
优化加载速率的方式:
一、优化图片
几乎没有那个网页上是没有图片的。如果你经历过56K狗的年代,你一定不会很喜欢有大量图片的网站。因为加载那样一个网页会耗费大量的时间。
即使在现今,网络带宽有了好多的提升,56K狗渐渐淡出,优化图片以推动网页速率还是太有必要的。
优化图片包括降低图片数、降低图象质量、使用恰当的格式。
1、减少图片数:去除不必要的图片。
2、降低图象质量:如果不是太必要,尝试减少图象的质量,尤其是jpg格式,降低5%的质量看起来变化不是很大,但文大小的变化是比较大的。
3、常识使用脚本文件取代疗效:
比如一些web2.0的款式,如果使用ps制做,每个图片基本会降低%5-%25的大小成本.
相反,使用javascript代码来实现疗效,仅仅只降低几个字节.
二、图像格式的选择
一般在网页上使用的图片格式有三种,jpg、png、gif。三种格式的具体技术指标不是这篇文章探讨的内容,我们只须要晓得在哪些时侯应当使用哪些格式,以降低网页的加载时间。
1、JPG:一般用于展示景色、人物、艺术照的摄影作品。有时也用在笔记本截屏上。
2、GIF:提供的颜色较少,可用在一些对颜色要求不高的地方,比如网站logo、按钮、表情等等。当然,gif的一个重要的应用是动漫图片。
3、PNG:PNG格式能提供透明背景,是一种专为网页展示而发明的图片格式。一般用于须要背景透明显示或对图象质量要求较高的网页上。
三、优化CSS
CSS叠层样式表使网页加载上去更高效,浏览体验也得到增强。有了CSS,表格布局的形式可以退职了。
但有时我们在写CSS的时侯会使用了一些比较罗嗦的句子,比如这句:
复制内容到剪贴板
代码:
margin-top: 10px;
margin-right: 20px;
margin-bottom: 10px;
margin-left: 20px;
你可以将它简化为:
margin: 10px 20px 10px 20px;
又或则这句:
A paragraph ofdecorated text
Secondparagraph
Thirdparagraph
Forthparagraph
可以用div来包含:
A paragraph of decoratedtext
Secondparagraph
Thirdparagraph
Forthparagraph
四、网址后加斜杠
有些网址,比如当服务器收到这样一个地址恳求的时侯,它须要耗费时间去确定这个地址的文件类型。如果220是一个目录,不妨在网址后多加一个斜杠,让其弄成,这样服务器才能一目了然地晓得要访问该目录下的index或default文件,从而节约了加载时间。
五、标明高度和长度
这点很重要,但很多人因为懒惰或其它缘由,总是将其忽略。当你在网页上添加图片或表格时,你应当指定它们的高度和长度,也就是height和width参数。如果浏览器没有找到这两个参数,它须要一边下载图片一边估算大小,如果图片好多,浏览器须要不断地调整页面。这不但影响速率,也影响浏览体验。
下面是一个比较友好的图片代码:
复制内容到剪贴板
代码:
当浏览器晓得了高度和长度参数后,即使图片暂时未能显示,页面上也会腾出图片的空位,然后继续加载前面的内容。从而加载时间快了,浏览体验也更好了
六、减少http请求
当浏览者打开某个网页,浏览器会发出好多对象恳求(图像、脚本等等),视乎网路延时情况,每个对象加载就会有所延后。如果网页上对象好多,这可以须要耗费大量的时间。
因此,要为http恳求减负。如何减负?
1、去除一些不必要的对象。
2、将临近的两张图片合成一张。
3、合并CSS文件
看看下边这段代码,需要加载三个CSS文件:
我们可以将其合成一个:
从而降低http恳求。
七、其它小技巧
1、去除不必要加载项。
2、如果在网页上嵌入了其它网站的widget,如果有选择余地,一定要选择速率快的。
3、尽量用图片取代flash,这对SEO也有用处。
4、有些内容可以静态化就将其静态化,以降低服务器的负担。
5、统计代码放到页尾(或者使用延迟加载)。
火车头网页正则提取电话 – 火车头正则采集电话
采集交流 • 优采云 发表了文章 • 0 个评论 • 678 次浏览 • 2020-05-25 08:01
话说好长时间不用火车头了。都有点蒙逼忘了。记得曾经用火车头采集论坛做垃圾文章网站,都多少年前的事情了,如今须要采集一些手机号,想想懒得写PHP,有现成的工具为何不用对吧,没毛病。
分分钟搞定,咱们先熟悉一下火车头的规则。
(?<content>[\s\S]*?)
Content //代表内容
? //表示匹配0次或则1次
\s //匹配所有空白字符
\S //匹配所有非空白字符
* //修饰匹配次数为 0 次或任意次
火车头采集手机号的正则:(?<content>1[34578]{1}[0-9]{9})
火车头采集邮箱的正则:(?<content>[\w\-\.]+@[\w\-\.]+\.\w+)
--------------------下方是正则表达式说明。-----------------------
表1.常用的元字符代码说明
. 匹配除换行符以外的任意字符
\w 匹配字母或数字或顿号或汉字
\s 匹配任意的空白符
\d 匹配数字
\b 匹配词组的开始或结束
^ 匹配字符串的开始$匹配字符串的结束
表2.常用的限定符代码/语法说明
* 重复零次或更多次
+ 重复一次或更多次
? 重复零次或一次
{n} 重复n次
{n,} 重复n次或更多次
{n,m} 重复n到m次
表3.常用的反义代码代码/语法说明
\W 匹配任意不是字母,数字,下划线,汉字的字符
\S 匹配任意不是空白符的字符
\D 匹配任意非数字的字符
\B 匹配不是词组开头或结束的位置
[^x] 匹配不仅x以外的任意字符
[^aeiou] 匹配不仅aeiou这几个字母以外的任意字符
常用分组句型
表5.懒惰限定符代码/语法说明
*? 重复任意次,但尽可能少重复
+? 重复1次或更多次,但尽可能少重复
?? 重复0次或1次,但尽可能少重复
{n,m}? 重复n到m次,但尽可能少重复
{n,}? 重复n次以上,但尽可能少重复
表7.尚未详尽讨论的句型代码/语法说明
\a 报案字符(打印它的疗效是笔记本嘀一声)
\b 一般是词组分界位置,但若果在字符类里使用代表退格
\t 制表符火车采集器 手机正则表达式,Tab
\r 回车
\v 竖向制表符
\f 换页符
\n 换行符
\e Escape
\0nn ASCII代码中八进制代码为nn的字符
\xnn ASCII代码中十六进制代码为nn的字符
\unnnn Unicode代码中十六进制代码为nnnn的字符
\cN ASCII控制字符。比如\cC代表Ctrl+C
\A 字符串开头(类似^,但不受处理多行选项的影响)
\Z 字符串结尾或行尾(不受处理多行选项的影响)
\z 字符串结尾(类似$火车采集器 手机正则表达式,但不受处理多行选项的影响)
\G 当前搜索的开头
\p{name} Unicode中命名为name的字符类,例如\p{IsGreek}
(?>exp) 贪婪子表达式(?<x>-<y>exp)平衡组
(?im-nsx:exp) 在子表达式exp中改变处理选项
(?im-nsx) 为表达式旁边的部份改变处理选项
(?(exp)yes|no) 把exp当成零宽正向先行断定,如果在这个位置能匹配,使用yes作为此组的表达式;否则使用no(?(exp)yes)同上,只是使用空表达式作为no
(?(name)yes|no) 假如命名为name的组捕获到了内容,使用yes作为表达式;否则使用no
(?(name)yes) 同上,只是使用空表达式作为no 查看全部
分分钟搞定,咱们先熟悉一下火车头的规则。
(?<content>[\s\S]*?)
Content //代表内容
? //表示匹配0次或则1次
\s //匹配所有空白字符
\S //匹配所有非空白字符
* //修饰匹配次数为 0 次或任意次
火车头采集手机号的正则:(?<content>1[34578]{1}[0-9]{9})
火车头采集邮箱的正则:(?<content>[\w\-\.]+@[\w\-\.]+\.\w+)
--------------------下方是正则表达式说明。-----------------------
表1.常用的元字符代码说明
. 匹配除换行符以外的任意字符
\w 匹配字母或数字或顿号或汉字
\s 匹配任意的空白符
\d 匹配数字
\b 匹配词组的开始或结束
^ 匹配字符串的开始$匹配字符串的结束
表2.常用的限定符代码/语法说明
* 重复零次或更多次
+ 重复一次或更多次
? 重复零次或一次
{n} 重复n次
{n,} 重复n次或更多次
{n,m} 重复n到m次
表3.常用的反义代码代码/语法说明
\W 匹配任意不是字母,数字,下划线,汉字的字符
\S 匹配任意不是空白符的字符
\D 匹配任意非数字的字符
\B 匹配不是词组开头或结束的位置
[^x] 匹配不仅x以外的任意字符
[^aeiou] 匹配不仅aeiou这几个字母以外的任意字符
常用分组句型
表5.懒惰限定符代码/语法说明
*? 重复任意次,但尽可能少重复
+? 重复1次或更多次,但尽可能少重复
?? 重复0次或1次,但尽可能少重复
{n,m}? 重复n到m次,但尽可能少重复
{n,}? 重复n次以上,但尽可能少重复
表7.尚未详尽讨论的句型代码/语法说明
\a 报案字符(打印它的疗效是笔记本嘀一声)
\b 一般是词组分界位置,但若果在字符类里使用代表退格
\t 制表符火车采集器 手机正则表达式,Tab
\r 回车
\v 竖向制表符
\f 换页符
\n 换行符
\e Escape
\0nn ASCII代码中八进制代码为nn的字符
\xnn ASCII代码中十六进制代码为nn的字符
\unnnn Unicode代码中十六进制代码为nnnn的字符
\cN ASCII控制字符。比如\cC代表Ctrl+C
\A 字符串开头(类似^,但不受处理多行选项的影响)
\Z 字符串结尾或行尾(不受处理多行选项的影响)
\z 字符串结尾(类似$火车采集器 手机正则表达式,但不受处理多行选项的影响)
\G 当前搜索的开头
\p{name} Unicode中命名为name的字符类,例如\p{IsGreek}
(?>exp) 贪婪子表达式(?<x>-<y>exp)平衡组
(?im-nsx:exp) 在子表达式exp中改变处理选项
(?im-nsx) 为表达式旁边的部份改变处理选项
(?(exp)yes|no) 把exp当成零宽正向先行断定,如果在这个位置能匹配,使用yes作为此组的表达式;否则使用no(?(exp)yes)同上,只是使用空表达式作为no
(?(name)yes|no) 假如命名为name的组捕获到了内容,使用yes作为表达式;否则使用no
(?(name)yes) 同上,只是使用空表达式作为no 查看全部
话说好长时间不用火车头了。都有点蒙逼忘了。记得曾经用火车头采集论坛做垃圾文章网站,都多少年前的事情了,如今须要采集一些手机号,想想懒得写PHP,有现成的工具为何不用对吧,没毛病。
分分钟搞定,咱们先熟悉一下火车头的规则。
(?<content>[\s\S]*?)
Content //代表内容
? //表示匹配0次或则1次
\s //匹配所有空白字符
\S //匹配所有非空白字符
* //修饰匹配次数为 0 次或任意次
火车头采集手机号的正则:(?<content>1[34578]{1}[0-9]{9})
火车头采集邮箱的正则:(?<content>[\w\-\.]+@[\w\-\.]+\.\w+)
--------------------下方是正则表达式说明。-----------------------
表1.常用的元字符代码说明
. 匹配除换行符以外的任意字符
\w 匹配字母或数字或顿号或汉字
\s 匹配任意的空白符
\d 匹配数字
\b 匹配词组的开始或结束
^ 匹配字符串的开始$匹配字符串的结束
表2.常用的限定符代码/语法说明
* 重复零次或更多次
+ 重复一次或更多次
? 重复零次或一次
{n} 重复n次
{n,} 重复n次或更多次
{n,m} 重复n到m次
表3.常用的反义代码代码/语法说明
\W 匹配任意不是字母,数字,下划线,汉字的字符
\S 匹配任意不是空白符的字符
\D 匹配任意非数字的字符
\B 匹配不是词组开头或结束的位置
[^x] 匹配不仅x以外的任意字符
[^aeiou] 匹配不仅aeiou这几个字母以外的任意字符
常用分组句型
表5.懒惰限定符代码/语法说明
*? 重复任意次,但尽可能少重复
+? 重复1次或更多次,但尽可能少重复
?? 重复0次或1次,但尽可能少重复
{n,m}? 重复n到m次,但尽可能少重复
{n,}? 重复n次以上,但尽可能少重复
表7.尚未详尽讨论的句型代码/语法说明
\a 报案字符(打印它的疗效是笔记本嘀一声)
\b 一般是词组分界位置,但若果在字符类里使用代表退格
\t 制表符火车采集器 手机正则表达式,Tab
\r 回车
\v 竖向制表符
\f 换页符
\n 换行符
\e Escape
\0nn ASCII代码中八进制代码为nn的字符
\xnn ASCII代码中十六进制代码为nn的字符
\unnnn Unicode代码中十六进制代码为nnnn的字符
\cN ASCII控制字符。比如\cC代表Ctrl+C
\A 字符串开头(类似^,但不受处理多行选项的影响)
\Z 字符串结尾或行尾(不受处理多行选项的影响)
\z 字符串结尾(类似$火车采集器 手机正则表达式,但不受处理多行选项的影响)
\G 当前搜索的开头
\p{name} Unicode中命名为name的字符类,例如\p{IsGreek}
(?>exp) 贪婪子表达式(?<x>-<y>exp)平衡组
(?im-nsx:exp) 在子表达式exp中改变处理选项
(?im-nsx) 为表达式旁边的部份改变处理选项
(?(exp)yes|no) 把exp当成零宽正向先行断定,如果在这个位置能匹配,使用yes作为此组的表达式;否则使用no(?(exp)yes)同上,只是使用空表达式作为no
(?(name)yes|no) 假如命名为name的组捕获到了内容,使用yes作为表达式;否则使用no
(?(name)yes) 同上,只是使用空表达式作为no
爬虫基本原理
采集交流 • 优采云 发表了文章 • 0 个评论 • 323 次浏览 • 2020-05-14 08:08
这篇文章的定位是,给有一些python基础,但是对爬虫一无所知的人写的。文中只会涉及到爬虫最核心的部份,完全避免莫名其妙的坑或概念,让读者认为爬虫是一件极其简单的事情,而事实上爬虫确实是一件极其简单的事情(如果你不是以爬虫为工作的话)。
本文分为如下几个部份
简单理解网路爬虫就是手动抓取网页信息的代码,可以简单理解成取代繁杂的复制粘贴操作的手段。
首先必须申明,爬虫的对象必须是你早已听到的网页,比如你不能说你想找到知乎上那个用户的关注人数最多,就希望通过写一个爬虫来帮你爬到答案。你必须明晰地晓得这个人,找到他的主页,然后才会用爬虫来抓取他页面上的信息。
下面我们用一个简单的事例来展示爬虫的工作流程。感觉多数教程第一篇都使用的是豆瓣top250,我们这儿换一个,抓取CSDN首页的文章标题,链接在这里,页面样子是这样的
抓取标题完整代码如下
import requests # 导入网页请求库
from bs4 import BeautifulSoup # 导入网页解析库
# 传入URL
r = requests.get('https://www.csdn.net/')
# 解析URL
soup = BeautifulSoup(r.text, 'html.parser')
content_list = soup.find_all('div', attrs = {'class': 'title'})
for content in content_list:
print(content.h2.a.text)
这样才会复印出所有标题,展示一部分如下
上述过程是一个最简单的完整爬虫流程,可以看出它的功能就是把这些标题复制粘贴到一起,免不仅自动操作的冗长。其实爬虫通常就是做这些事的,比如我们须要用链家的数据进行剖析,看到链家的页面是这样的
我们想获取每位房屋的标题、几室几厅、多少平米、朝向、装修、价格等等数组(即指标),就可以通过爬虫进行定位,自动化抓取这100页所有房屋的那些数组信息。比如100页里有2000个房屋,总共抓取10个数组,爬虫运行结束就可以得到一个2000行10列的excel表格。
注:如果还没有安装里面两个库的读者可以在命令行下分别运行下边两行命令完成安装
pip install requests
pip install beautifulsoup4
知道了爬虫是拿来干哪些的以后,我们来介绍一些最常见到的概念
1.URL
URL英文称为统一资源定位符,其实可以理解成网页的链接,比如前面的就是一个URL。
但是更广义的URL不只是我们常听到的网页资源链接,而是资源在网页中的定位标示。我们一般说的网页是一个资源,网页中加载的每一张图片也是一个资源,它们在互联网中也有惟一的定位URL。比如我们从CSDN网页上随意找一张图片
这个链接就是这个图片资源的定位符,将这个链接输入浏览器中都会显示出这张图片网页爬虫,所以说这张图片也对应一个URL。
不过晓得如此回事就好,我们一般所说的传入URL指的就是把网页的链接传进去。上面代码中
r = requests.get('https://www.csdn.net/')
就是在将URL传入恳求函数。
2.网页恳求
说到网页恳求,就有必要讲一下我们平时浏览网页时,信息交互的模式大约是什么样的。我们平时用浏览器浏览网页的时侯,鼠标点了一个链接,比如你如今点击这儿,其实浏览器帮你向这个网页发送了恳求(request),维护网页的服务器(可以理解为CSDN公司里的一台笔记本,在维护这CSDN上的各个网页)收到了这个恳求,判定这个恳求是有效的,于是返回了一些响应信息(response)到浏览器,浏览器将这种信息进行渲染(可以理解成 处理成人能读懂的样子),就是你看见的网页的样子了。发送恳求与接收恳求的过程就和 发陌陌和收到回复的过程类似。
而如今我们要用代码来模拟滑鼠点击的过程。上面的requests.get就是使代码帮你向这个网页发送了这个恳求,如果恳求被判断为有效,网页的服务器也会把信息传送给你,传送回去的这种信息就被形参到变量r之中。所以这个变量r里就包含有我们想要的信息了,也包括这些我们想要提取的标题。
我们可以print(r.text)看一下上面有哪些东西
我们再看一下网页的源代码(如何读懂这个源码,以及这个源码如何查看下一节HTML会详尽提到)
源代码和r.text虽然是一模一样的东西。r.text虽然就是一个字符串,字符串中有我们刚才抓取到的所有标题,我们只要通过字符串匹配方式(比如正则表达式)将她们提取下来就可以了。这样说是不是觉得爬虫十分简单呢?只要这样傻蛋操作
r = requests.get('https://www.csdn.net/')
再直接从r.text字符串中提取信息即可。其实爬虫就是那么简单。
但是解析是如何回事呢,为什么刚才不直接用正则而要用bs4呢?因为便捷,但是正则也是完全可以的,只是相对麻烦一些、需要写更多的代码而已。
3.网页解析
网页解析虽然就从网页服务器返回给我们的信息中提取我们想要数据的过程。其实使用正则表达式提取我们要的标题的过程也可以称为网页解析。
因为当前绝大多数网页源代码都是用HTML语言写的,而HTML语言时特别有规律性的,比如我们要的所有文章标题都具有相同结构,也就是说它周围的字符串都是十分类似的,这样我们能够批量获取。所以就有大鳄专门封装了怎样从HTML代码中提取特定文本的库,也就是我们平常说的网页解析库,如bs4 lxml pyquery等,其实把她们当作处理字符串的就可以了。
为了更清楚地了解怎样对网页进行解析,我们须要先简略把握HTML代码的结构。
引用维基百科中的一段话来介绍HTML
超文本标记语言(英语:HyperText Markup Language,简称:HTML)是一种用于创建网页的标准标记语言。HTML是一种基础技术,常与CSS、JavaScript一起被诸多网站用于设计令人赏心悦目的网页、网页应用程序以及移动应用程序的用户界面[1]。网页浏览器可以读取HTML文件,并将其渲染成可视化网页。
为了使读者对HTML有更清楚的认识,我们来写一点简单的HTML代码。用文本编辑器(记事本也可以)创建一个名子为a.html的文件,在里面写下如下代码
<!DOCTYPE html>
<html>
<head>
<title>爬虫基本原理</title>
</head>
<body>
<h1>HTML介绍</h1>
<p>第一段</p>
<p>第二段</p>
</body>
</html>
保存,然后你双击这个文件,就会手动用浏览器打开,然后你还能见到下边这个样子的页面
你若果根据我的操作来做的话,你已然创建了一个简单的网页,现在你看见的所有网页都是这样设计的,只是比你的复杂一点而已,不信你去瞧瞧刚刚截图出来的网页源代码图片。
接下来,我们来看一下HTML语言的特性。最重要的一点是网页爬虫,文本都是被标签(h1标签 p标签)夹在中间的,而这种标签都是特定的,有专门用途的。比如<h1>就表示一级标题,包在上面的文本自然会被放大显示;而<p>标签则表示段落。
再看里面的源代码截图,head meta script title div li每一个都是标签,层层嵌套。我们完全不需要晓得总共有什么种标签,也不需要晓得这种标签都是拿来干哪些的,我们只要找到我们要的信息包含在哪些标签里就行了。比如使用正则表达式就直接用<p>(.*?)</p>就可以把上面的内容提取下来了。
但是事实似乎没有这么简单,看里面的截图标签如何是这样的<nav id="nav" class="clearfix">?其实这是一个<nav>标签,后面的id class是这个标签的属性。
为什么要给标签设置属性呢?我们先考虑这样一个问题:我们看见的网页千差万别,文字的颜色字体等都不一样,这是如何设置的呢?答案是使用css样式。
css句子类似这样
h1 {
color: white;
text-align: center;
}
p {
font-family: verdana;
font-size: 20px;
}
即设置对应标签的颜色、字体、大小、居中等。而当有的段落使用这个字体,有的段落使用哪个字体如何办呢?css这样设置
p.test1 {
font-size: 20px;
}
p.test2 {
font-size: 15px;
}
在HTML代码中则这样写
<p class="test1">20px大小的字</p>
<p class="test2">15px大小的字</p>
所以不同属性就是为了分辨相同标签用的,这相当于给标签进行了分类,在统一设计款式上更方便,同时对于我们依照属性定位我们想要内容的位置虽然也是更方便了。这里要说明一下,class id这两个属性比较特殊,用的也最多,所以各自弄了一个快捷键来表示,class用.,id用#。
做爬虫不需要了解刚才编撰的css代码内容放到那里之类的问题,也不需要了解css代码设置了哪些,我们只会和HTML打交道,所以只要理解HTML中属性的作用就可以了。
如果想要更进一步了解HTML和CSS,可以到w3school网站学习。
现在你就早已具备了解析网页须要的全部HTML知识了。我们通常就是依据标签名配合属性值来定位我们想要资源的位置的,其他的都不用管。这时,我们再来看爬虫的解析代码
把上面的代码再粘贴一遍如下
import requests # 导入网页请求库
from bs4 import BeautifulSoup # 导入网页解析库
# 传入URL
r = requests.get('https://www.csdn.net/')
# 解析URL
soup = BeautifulSoup(r.text, 'html.parser')
content_list = soup.find_all('div', attrs = {'class': 'title'})
for content in content_list:
print(content.h2.a.text)
解释一下里面代码的过程
可以看见里面的代码十分简约,思路清晰,读者可以自己想一想假如要用正则表达式怎么匹配那些标签,会发觉代码冗长好多,虽然它也有更快的优势。
那么我们是如何晓得要找寻什么样属性的div标签,为什么要找h2 a标签而不是其他的呢?这就要去剖析网页的源代码了。而这个过程也十分简单。
我们如今用谷歌浏览器打开CSDN这个网站,找一个空白的位置右键-查看网页源代码,这时才会打开一个新的页面这个页面就是这个网站的HTML源代码了,我们可以通过这个页面来看我们要的信息在那里,但是觉得十分不便捷,因为有太多无用的信息做干扰,我们难以快速掌控网页的结构。所以我们可以用另一种形式查看源代码。
用谷歌浏览器打开CSDN这个网站,找一个空白的位置右键-检查,就会弹出一个框,如下图所示
(如果没有听到这个界面,注意要切换到Element中)
这个页面最大的用处是通过折叠来使人更快探求出网页的结构。
其中的这些代码就是HTML代码,该页面的一个个标题就存在这一个个li上面。点击li后面的三角就可以展开具体的代码内容,如下图所示
可以看见文章的标题(打造一个高性能、易落地的公链开发平台)就在这个源代码之中,也就是说在我们刚才获得的r.text字符串之中。而我们代码定位路径也一目了然了,因为每位li上面还会有一个<div class="title">而每一个div上面还会有一个h2 里面有一个a,a中包含我们要的标题名称。所以我们就用find_all找到所有这样的div标签,存储为一个list,再对list进行循环,对每一个元素提取h2 a 再提取标签中的内容。
当然我们也可以find_all最外边的li标签,再一层层往里找,都是一样的。只要找到定位信息的惟一标示(标签或则属性)就可以了。
虽然在这里看源代码可以折叠一些没用的代码,但是虽然还有一些更好用的工具来辅助我们找到我们要的信息在网页源码中的位置。比如下边这个键盘符号。
在所有代码都折叠上去的情况下,点击这个键盘,之后再去点击网页中的元素,浏览器都会手动帮你把你点击的元素选中下来,其实你键盘悬在一个元素前面的时侯,就早已帮你定位了,如下图所示
当我们要爬一个网页的时侯,只须要如下流程
现在,对于一些没有丝毫反爬举措的网站我们都可以游刃有余了。至于抓取多个数组的数据怎么组织在一起、抓取多页(URL有规律的情况下)的代码怎样设计,就不是爬虫知识范畴了,这是用python基础知识就可以解决的。下一系列文章就主要讲这一部分。接下来给几个当前可以练手的网站
如果使用BeautifulSoup的定位的过程中遇见困难,可以直接到网上搜教程,也可以等我们这个专题前面更新的BeautifulSoup详尽介绍。
如果你去抓取其他网站,最好先看一下r.text是不是和网站源代码一模一样,如果不是,说明你对方服务器没有把真正的信息给你,说明他可能看出你是爬虫了(进行网页恳求的时侯,浏览器和requests.get都相当于带着一堆资格证去敲门,对方会检测你这种资格证,浏览器的资格证通常是可以通过的,而代码的资格证就可能不合格,因为代码的资格证可能有一些比较固定的特征,对方服务器预先设定好,资格证是这样的恳求一律拒绝,因为她们一定是爬虫,这就是反爬虫机制),这时就须要懂一些反反爬举措就能获得真正的信息,反反爬方式的学习是一个积累的过程,我们前面再讲。读者假如遇见一些反爬机制,可以到网上查这个网站的爬虫,估计都能查到一些博客讲怎么破解,甚至直接贴出代码。
在这篇的基础上抓取多页以及代码设计的改进看下边这三篇续集
爬虫代码改进(一)
爬虫代码改进(二)
爬虫代码改进(三)
专栏主页:python编程
专栏目录:目录
爬虫目录:爬虫系列目录
版本说明:软件及包版本说明 查看全部
本文分为如下几个部份
简单理解网路爬虫就是手动抓取网页信息的代码,可以简单理解成取代繁杂的复制粘贴操作的手段。
首先必须申明,爬虫的对象必须是你早已听到的网页,比如你不能说你想找到知乎上那个用户的关注人数最多,就希望通过写一个爬虫来帮你爬到答案。你必须明晰地晓得这个人,找到他的主页,然后才会用爬虫来抓取他页面上的信息。
下面我们用一个简单的事例来展示爬虫的工作流程。感觉多数教程第一篇都使用的是豆瓣top250,我们这儿换一个,抓取CSDN首页的文章标题,链接在这里,页面样子是这样的
抓取标题完整代码如下
import requests # 导入网页请求库
from bs4 import BeautifulSoup # 导入网页解析库
# 传入URL
r = requests.get('https://www.csdn.net/')
# 解析URL
soup = BeautifulSoup(r.text, 'html.parser')
content_list = soup.find_all('div', attrs = {'class': 'title'})
for content in content_list:
print(content.h2.a.text)
这样才会复印出所有标题,展示一部分如下
上述过程是一个最简单的完整爬虫流程,可以看出它的功能就是把这些标题复制粘贴到一起,免不仅自动操作的冗长。其实爬虫通常就是做这些事的,比如我们须要用链家的数据进行剖析,看到链家的页面是这样的
我们想获取每位房屋的标题、几室几厅、多少平米、朝向、装修、价格等等数组(即指标),就可以通过爬虫进行定位,自动化抓取这100页所有房屋的那些数组信息。比如100页里有2000个房屋,总共抓取10个数组,爬虫运行结束就可以得到一个2000行10列的excel表格。
注:如果还没有安装里面两个库的读者可以在命令行下分别运行下边两行命令完成安装
pip install requests
pip install beautifulsoup4
知道了爬虫是拿来干哪些的以后,我们来介绍一些最常见到的概念
1.URL
URL英文称为统一资源定位符,其实可以理解成网页的链接,比如前面的就是一个URL。
但是更广义的URL不只是我们常听到的网页资源链接,而是资源在网页中的定位标示。我们一般说的网页是一个资源,网页中加载的每一张图片也是一个资源,它们在互联网中也有惟一的定位URL。比如我们从CSDN网页上随意找一张图片
这个链接就是这个图片资源的定位符,将这个链接输入浏览器中都会显示出这张图片网页爬虫,所以说这张图片也对应一个URL。
不过晓得如此回事就好,我们一般所说的传入URL指的就是把网页的链接传进去。上面代码中
r = requests.get('https://www.csdn.net/')
就是在将URL传入恳求函数。
2.网页恳求
说到网页恳求,就有必要讲一下我们平时浏览网页时,信息交互的模式大约是什么样的。我们平时用浏览器浏览网页的时侯,鼠标点了一个链接,比如你如今点击这儿,其实浏览器帮你向这个网页发送了恳求(request),维护网页的服务器(可以理解为CSDN公司里的一台笔记本,在维护这CSDN上的各个网页)收到了这个恳求,判定这个恳求是有效的,于是返回了一些响应信息(response)到浏览器,浏览器将这种信息进行渲染(可以理解成 处理成人能读懂的样子),就是你看见的网页的样子了。发送恳求与接收恳求的过程就和 发陌陌和收到回复的过程类似。
而如今我们要用代码来模拟滑鼠点击的过程。上面的requests.get就是使代码帮你向这个网页发送了这个恳求,如果恳求被判断为有效,网页的服务器也会把信息传送给你,传送回去的这种信息就被形参到变量r之中。所以这个变量r里就包含有我们想要的信息了,也包括这些我们想要提取的标题。
我们可以print(r.text)看一下上面有哪些东西
我们再看一下网页的源代码(如何读懂这个源码,以及这个源码如何查看下一节HTML会详尽提到)
源代码和r.text虽然是一模一样的东西。r.text虽然就是一个字符串,字符串中有我们刚才抓取到的所有标题,我们只要通过字符串匹配方式(比如正则表达式)将她们提取下来就可以了。这样说是不是觉得爬虫十分简单呢?只要这样傻蛋操作
r = requests.get('https://www.csdn.net/')
再直接从r.text字符串中提取信息即可。其实爬虫就是那么简单。
但是解析是如何回事呢,为什么刚才不直接用正则而要用bs4呢?因为便捷,但是正则也是完全可以的,只是相对麻烦一些、需要写更多的代码而已。
3.网页解析
网页解析虽然就从网页服务器返回给我们的信息中提取我们想要数据的过程。其实使用正则表达式提取我们要的标题的过程也可以称为网页解析。
因为当前绝大多数网页源代码都是用HTML语言写的,而HTML语言时特别有规律性的,比如我们要的所有文章标题都具有相同结构,也就是说它周围的字符串都是十分类似的,这样我们能够批量获取。所以就有大鳄专门封装了怎样从HTML代码中提取特定文本的库,也就是我们平常说的网页解析库,如bs4 lxml pyquery等,其实把她们当作处理字符串的就可以了。
为了更清楚地了解怎样对网页进行解析,我们须要先简略把握HTML代码的结构。
引用维基百科中的一段话来介绍HTML
超文本标记语言(英语:HyperText Markup Language,简称:HTML)是一种用于创建网页的标准标记语言。HTML是一种基础技术,常与CSS、JavaScript一起被诸多网站用于设计令人赏心悦目的网页、网页应用程序以及移动应用程序的用户界面[1]。网页浏览器可以读取HTML文件,并将其渲染成可视化网页。
为了使读者对HTML有更清楚的认识,我们来写一点简单的HTML代码。用文本编辑器(记事本也可以)创建一个名子为a.html的文件,在里面写下如下代码
<!DOCTYPE html>
<html>
<head>
<title>爬虫基本原理</title>
</head>
<body>
<h1>HTML介绍</h1>
<p>第一段</p>
<p>第二段</p>
</body>
</html>
保存,然后你双击这个文件,就会手动用浏览器打开,然后你还能见到下边这个样子的页面
你若果根据我的操作来做的话,你已然创建了一个简单的网页,现在你看见的所有网页都是这样设计的,只是比你的复杂一点而已,不信你去瞧瞧刚刚截图出来的网页源代码图片。
接下来,我们来看一下HTML语言的特性。最重要的一点是网页爬虫,文本都是被标签(h1标签 p标签)夹在中间的,而这种标签都是特定的,有专门用途的。比如<h1>就表示一级标题,包在上面的文本自然会被放大显示;而<p>标签则表示段落。
再看里面的源代码截图,head meta script title div li每一个都是标签,层层嵌套。我们完全不需要晓得总共有什么种标签,也不需要晓得这种标签都是拿来干哪些的,我们只要找到我们要的信息包含在哪些标签里就行了。比如使用正则表达式就直接用<p>(.*?)</p>就可以把上面的内容提取下来了。
但是事实似乎没有这么简单,看里面的截图标签如何是这样的<nav id="nav" class="clearfix">?其实这是一个<nav>标签,后面的id class是这个标签的属性。
为什么要给标签设置属性呢?我们先考虑这样一个问题:我们看见的网页千差万别,文字的颜色字体等都不一样,这是如何设置的呢?答案是使用css样式。
css句子类似这样
h1 {
color: white;
text-align: center;
}
p {
font-family: verdana;
font-size: 20px;
}
即设置对应标签的颜色、字体、大小、居中等。而当有的段落使用这个字体,有的段落使用哪个字体如何办呢?css这样设置
p.test1 {
font-size: 20px;
}
p.test2 {
font-size: 15px;
}
在HTML代码中则这样写
<p class="test1">20px大小的字</p>
<p class="test2">15px大小的字</p>
所以不同属性就是为了分辨相同标签用的,这相当于给标签进行了分类,在统一设计款式上更方便,同时对于我们依照属性定位我们想要内容的位置虽然也是更方便了。这里要说明一下,class id这两个属性比较特殊,用的也最多,所以各自弄了一个快捷键来表示,class用.,id用#。
做爬虫不需要了解刚才编撰的css代码内容放到那里之类的问题,也不需要了解css代码设置了哪些,我们只会和HTML打交道,所以只要理解HTML中属性的作用就可以了。
如果想要更进一步了解HTML和CSS,可以到w3school网站学习。
现在你就早已具备了解析网页须要的全部HTML知识了。我们通常就是依据标签名配合属性值来定位我们想要资源的位置的,其他的都不用管。这时,我们再来看爬虫的解析代码
把上面的代码再粘贴一遍如下
import requests # 导入网页请求库
from bs4 import BeautifulSoup # 导入网页解析库
# 传入URL
r = requests.get('https://www.csdn.net/')
# 解析URL
soup = BeautifulSoup(r.text, 'html.parser')
content_list = soup.find_all('div', attrs = {'class': 'title'})
for content in content_list:
print(content.h2.a.text)
解释一下里面代码的过程
可以看见里面的代码十分简约,思路清晰,读者可以自己想一想假如要用正则表达式怎么匹配那些标签,会发觉代码冗长好多,虽然它也有更快的优势。
那么我们是如何晓得要找寻什么样属性的div标签,为什么要找h2 a标签而不是其他的呢?这就要去剖析网页的源代码了。而这个过程也十分简单。
我们如今用谷歌浏览器打开CSDN这个网站,找一个空白的位置右键-查看网页源代码,这时才会打开一个新的页面这个页面就是这个网站的HTML源代码了,我们可以通过这个页面来看我们要的信息在那里,但是觉得十分不便捷,因为有太多无用的信息做干扰,我们难以快速掌控网页的结构。所以我们可以用另一种形式查看源代码。
用谷歌浏览器打开CSDN这个网站,找一个空白的位置右键-检查,就会弹出一个框,如下图所示
(如果没有听到这个界面,注意要切换到Element中)
这个页面最大的用处是通过折叠来使人更快探求出网页的结构。
其中的这些代码就是HTML代码,该页面的一个个标题就存在这一个个li上面。点击li后面的三角就可以展开具体的代码内容,如下图所示
可以看见文章的标题(打造一个高性能、易落地的公链开发平台)就在这个源代码之中,也就是说在我们刚才获得的r.text字符串之中。而我们代码定位路径也一目了然了,因为每位li上面还会有一个<div class="title">而每一个div上面还会有一个h2 里面有一个a,a中包含我们要的标题名称。所以我们就用find_all找到所有这样的div标签,存储为一个list,再对list进行循环,对每一个元素提取h2 a 再提取标签中的内容。
当然我们也可以find_all最外边的li标签,再一层层往里找,都是一样的。只要找到定位信息的惟一标示(标签或则属性)就可以了。
虽然在这里看源代码可以折叠一些没用的代码,但是虽然还有一些更好用的工具来辅助我们找到我们要的信息在网页源码中的位置。比如下边这个键盘符号。
在所有代码都折叠上去的情况下,点击这个键盘,之后再去点击网页中的元素,浏览器都会手动帮你把你点击的元素选中下来,其实你键盘悬在一个元素前面的时侯,就早已帮你定位了,如下图所示
当我们要爬一个网页的时侯,只须要如下流程
现在,对于一些没有丝毫反爬举措的网站我们都可以游刃有余了。至于抓取多个数组的数据怎么组织在一起、抓取多页(URL有规律的情况下)的代码怎样设计,就不是爬虫知识范畴了,这是用python基础知识就可以解决的。下一系列文章就主要讲这一部分。接下来给几个当前可以练手的网站
如果使用BeautifulSoup的定位的过程中遇见困难,可以直接到网上搜教程,也可以等我们这个专题前面更新的BeautifulSoup详尽介绍。
如果你去抓取其他网站,最好先看一下r.text是不是和网站源代码一模一样,如果不是,说明你对方服务器没有把真正的信息给你,说明他可能看出你是爬虫了(进行网页恳求的时侯,浏览器和requests.get都相当于带着一堆资格证去敲门,对方会检测你这种资格证,浏览器的资格证通常是可以通过的,而代码的资格证就可能不合格,因为代码的资格证可能有一些比较固定的特征,对方服务器预先设定好,资格证是这样的恳求一律拒绝,因为她们一定是爬虫,这就是反爬虫机制),这时就须要懂一些反反爬举措就能获得真正的信息,反反爬方式的学习是一个积累的过程,我们前面再讲。读者假如遇见一些反爬机制,可以到网上查这个网站的爬虫,估计都能查到一些博客讲怎么破解,甚至直接贴出代码。
在这篇的基础上抓取多页以及代码设计的改进看下边这三篇续集
爬虫代码改进(一)
爬虫代码改进(二)
爬虫代码改进(三)
专栏主页:python编程
专栏目录:目录
爬虫目录:爬虫系列目录
版本说明:软件及包版本说明 查看全部
这篇文章的定位是,给有一些python基础,但是对爬虫一无所知的人写的。文中只会涉及到爬虫最核心的部份,完全避免莫名其妙的坑或概念,让读者认为爬虫是一件极其简单的事情,而事实上爬虫确实是一件极其简单的事情(如果你不是以爬虫为工作的话)。
本文分为如下几个部份
简单理解网路爬虫就是手动抓取网页信息的代码,可以简单理解成取代繁杂的复制粘贴操作的手段。
首先必须申明,爬虫的对象必须是你早已听到的网页,比如你不能说你想找到知乎上那个用户的关注人数最多,就希望通过写一个爬虫来帮你爬到答案。你必须明晰地晓得这个人,找到他的主页,然后才会用爬虫来抓取他页面上的信息。
下面我们用一个简单的事例来展示爬虫的工作流程。感觉多数教程第一篇都使用的是豆瓣top250,我们这儿换一个,抓取CSDN首页的文章标题,链接在这里,页面样子是这样的

抓取标题完整代码如下
import requests # 导入网页请求库
from bs4 import BeautifulSoup # 导入网页解析库
# 传入URL
r = requests.get('https://www.csdn.net/')
# 解析URL
soup = BeautifulSoup(r.text, 'html.parser')
content_list = soup.find_all('div', attrs = {'class': 'title'})
for content in content_list:
print(content.h2.a.text)
这样才会复印出所有标题,展示一部分如下

上述过程是一个最简单的完整爬虫流程,可以看出它的功能就是把这些标题复制粘贴到一起,免不仅自动操作的冗长。其实爬虫通常就是做这些事的,比如我们须要用链家的数据进行剖析,看到链家的页面是这样的

我们想获取每位房屋的标题、几室几厅、多少平米、朝向、装修、价格等等数组(即指标),就可以通过爬虫进行定位,自动化抓取这100页所有房屋的那些数组信息。比如100页里有2000个房屋,总共抓取10个数组,爬虫运行结束就可以得到一个2000行10列的excel表格。
注:如果还没有安装里面两个库的读者可以在命令行下分别运行下边两行命令完成安装
pip install requests
pip install beautifulsoup4
知道了爬虫是拿来干哪些的以后,我们来介绍一些最常见到的概念
1.URL
URL英文称为统一资源定位符,其实可以理解成网页的链接,比如前面的就是一个URL。
但是更广义的URL不只是我们常听到的网页资源链接,而是资源在网页中的定位标示。我们一般说的网页是一个资源,网页中加载的每一张图片也是一个资源,它们在互联网中也有惟一的定位URL。比如我们从CSDN网页上随意找一张图片

这个链接就是这个图片资源的定位符,将这个链接输入浏览器中都会显示出这张图片网页爬虫,所以说这张图片也对应一个URL。
不过晓得如此回事就好,我们一般所说的传入URL指的就是把网页的链接传进去。上面代码中
r = requests.get('https://www.csdn.net/')
就是在将URL传入恳求函数。
2.网页恳求
说到网页恳求,就有必要讲一下我们平时浏览网页时,信息交互的模式大约是什么样的。我们平时用浏览器浏览网页的时侯,鼠标点了一个链接,比如你如今点击这儿,其实浏览器帮你向这个网页发送了恳求(request),维护网页的服务器(可以理解为CSDN公司里的一台笔记本,在维护这CSDN上的各个网页)收到了这个恳求,判定这个恳求是有效的,于是返回了一些响应信息(response)到浏览器,浏览器将这种信息进行渲染(可以理解成 处理成人能读懂的样子),就是你看见的网页的样子了。发送恳求与接收恳求的过程就和 发陌陌和收到回复的过程类似。
而如今我们要用代码来模拟滑鼠点击的过程。上面的requests.get就是使代码帮你向这个网页发送了这个恳求,如果恳求被判断为有效,网页的服务器也会把信息传送给你,传送回去的这种信息就被形参到变量r之中。所以这个变量r里就包含有我们想要的信息了,也包括这些我们想要提取的标题。
我们可以print(r.text)看一下上面有哪些东西

我们再看一下网页的源代码(如何读懂这个源码,以及这个源码如何查看下一节HTML会详尽提到)

源代码和r.text虽然是一模一样的东西。r.text虽然就是一个字符串,字符串中有我们刚才抓取到的所有标题,我们只要通过字符串匹配方式(比如正则表达式)将她们提取下来就可以了。这样说是不是觉得爬虫十分简单呢?只要这样傻蛋操作
r = requests.get('https://www.csdn.net/')
再直接从r.text字符串中提取信息即可。其实爬虫就是那么简单。
但是解析是如何回事呢,为什么刚才不直接用正则而要用bs4呢?因为便捷,但是正则也是完全可以的,只是相对麻烦一些、需要写更多的代码而已。
3.网页解析
网页解析虽然就从网页服务器返回给我们的信息中提取我们想要数据的过程。其实使用正则表达式提取我们要的标题的过程也可以称为网页解析。
因为当前绝大多数网页源代码都是用HTML语言写的,而HTML语言时特别有规律性的,比如我们要的所有文章标题都具有相同结构,也就是说它周围的字符串都是十分类似的,这样我们能够批量获取。所以就有大鳄专门封装了怎样从HTML代码中提取特定文本的库,也就是我们平常说的网页解析库,如bs4 lxml pyquery等,其实把她们当作处理字符串的就可以了。
为了更清楚地了解怎样对网页进行解析,我们须要先简略把握HTML代码的结构。
引用维基百科中的一段话来介绍HTML
超文本标记语言(英语:HyperText Markup Language,简称:HTML)是一种用于创建网页的标准标记语言。HTML是一种基础技术,常与CSS、JavaScript一起被诸多网站用于设计令人赏心悦目的网页、网页应用程序以及移动应用程序的用户界面[1]。网页浏览器可以读取HTML文件,并将其渲染成可视化网页。
为了使读者对HTML有更清楚的认识,我们来写一点简单的HTML代码。用文本编辑器(记事本也可以)创建一个名子为a.html的文件,在里面写下如下代码
<!DOCTYPE html>
<html>
<head>
<title>爬虫基本原理</title>
</head>
<body>
<h1>HTML介绍</h1>
<p>第一段</p>
<p>第二段</p>
</body>
</html>
保存,然后你双击这个文件,就会手动用浏览器打开,然后你还能见到下边这个样子的页面

你若果根据我的操作来做的话,你已然创建了一个简单的网页,现在你看见的所有网页都是这样设计的,只是比你的复杂一点而已,不信你去瞧瞧刚刚截图出来的网页源代码图片。
接下来,我们来看一下HTML语言的特性。最重要的一点是网页爬虫,文本都是被标签(h1标签 p标签)夹在中间的,而这种标签都是特定的,有专门用途的。比如<h1>就表示一级标题,包在上面的文本自然会被放大显示;而<p>标签则表示段落。
再看里面的源代码截图,head meta script title div li每一个都是标签,层层嵌套。我们完全不需要晓得总共有什么种标签,也不需要晓得这种标签都是拿来干哪些的,我们只要找到我们要的信息包含在哪些标签里就行了。比如使用正则表达式就直接用<p>(.*?)</p>就可以把上面的内容提取下来了。
但是事实似乎没有这么简单,看里面的截图标签如何是这样的<nav id="nav" class="clearfix">?其实这是一个<nav>标签,后面的id class是这个标签的属性。
为什么要给标签设置属性呢?我们先考虑这样一个问题:我们看见的网页千差万别,文字的颜色字体等都不一样,这是如何设置的呢?答案是使用css样式。
css句子类似这样
h1 {
color: white;
text-align: center;
}
p {
font-family: verdana;
font-size: 20px;
}
即设置对应标签的颜色、字体、大小、居中等。而当有的段落使用这个字体,有的段落使用哪个字体如何办呢?css这样设置
p.test1 {
font-size: 20px;
}
p.test2 {
font-size: 15px;
}
在HTML代码中则这样写
<p class="test1">20px大小的字</p>
<p class="test2">15px大小的字</p>
所以不同属性就是为了分辨相同标签用的,这相当于给标签进行了分类,在统一设计款式上更方便,同时对于我们依照属性定位我们想要内容的位置虽然也是更方便了。这里要说明一下,class id这两个属性比较特殊,用的也最多,所以各自弄了一个快捷键来表示,class用.,id用#。
做爬虫不需要了解刚才编撰的css代码内容放到那里之类的问题,也不需要了解css代码设置了哪些,我们只会和HTML打交道,所以只要理解HTML中属性的作用就可以了。
如果想要更进一步了解HTML和CSS,可以到w3school网站学习。
现在你就早已具备了解析网页须要的全部HTML知识了。我们通常就是依据标签名配合属性值来定位我们想要资源的位置的,其他的都不用管。这时,我们再来看爬虫的解析代码
把上面的代码再粘贴一遍如下
import requests # 导入网页请求库
from bs4 import BeautifulSoup # 导入网页解析库
# 传入URL
r = requests.get('https://www.csdn.net/')
# 解析URL
soup = BeautifulSoup(r.text, 'html.parser')
content_list = soup.find_all('div', attrs = {'class': 'title'})
for content in content_list:
print(content.h2.a.text)
解释一下里面代码的过程
可以看见里面的代码十分简约,思路清晰,读者可以自己想一想假如要用正则表达式怎么匹配那些标签,会发觉代码冗长好多,虽然它也有更快的优势。
那么我们是如何晓得要找寻什么样属性的div标签,为什么要找h2 a标签而不是其他的呢?这就要去剖析网页的源代码了。而这个过程也十分简单。
我们如今用谷歌浏览器打开CSDN这个网站,找一个空白的位置右键-查看网页源代码,这时才会打开一个新的页面这个页面就是这个网站的HTML源代码了,我们可以通过这个页面来看我们要的信息在那里,但是觉得十分不便捷,因为有太多无用的信息做干扰,我们难以快速掌控网页的结构。所以我们可以用另一种形式查看源代码。
用谷歌浏览器打开CSDN这个网站,找一个空白的位置右键-检查,就会弹出一个框,如下图所示

(如果没有听到这个界面,注意要切换到Element中)
这个页面最大的用处是通过折叠来使人更快探求出网页的结构。
其中的这些代码就是HTML代码,该页面的一个个标题就存在这一个个li上面。点击li后面的三角就可以展开具体的代码内容,如下图所示

可以看见文章的标题(打造一个高性能、易落地的公链开发平台)就在这个源代码之中,也就是说在我们刚才获得的r.text字符串之中。而我们代码定位路径也一目了然了,因为每位li上面还会有一个<div class="title">而每一个div上面还会有一个h2 里面有一个a,a中包含我们要的标题名称。所以我们就用find_all找到所有这样的div标签,存储为一个list,再对list进行循环,对每一个元素提取h2 a 再提取标签中的内容。
当然我们也可以find_all最外边的li标签,再一层层往里找,都是一样的。只要找到定位信息的惟一标示(标签或则属性)就可以了。
虽然在这里看源代码可以折叠一些没用的代码,但是虽然还有一些更好用的工具来辅助我们找到我们要的信息在网页源码中的位置。比如下边这个键盘符号。

在所有代码都折叠上去的情况下,点击这个键盘,之后再去点击网页中的元素,浏览器都会手动帮你把你点击的元素选中下来,其实你键盘悬在一个元素前面的时侯,就早已帮你定位了,如下图所示

当我们要爬一个网页的时侯,只须要如下流程
现在,对于一些没有丝毫反爬举措的网站我们都可以游刃有余了。至于抓取多个数组的数据怎么组织在一起、抓取多页(URL有规律的情况下)的代码怎样设计,就不是爬虫知识范畴了,这是用python基础知识就可以解决的。下一系列文章就主要讲这一部分。接下来给几个当前可以练手的网站
如果使用BeautifulSoup的定位的过程中遇见困难,可以直接到网上搜教程,也可以等我们这个专题前面更新的BeautifulSoup详尽介绍。
如果你去抓取其他网站,最好先看一下r.text是不是和网站源代码一模一样,如果不是,说明你对方服务器没有把真正的信息给你,说明他可能看出你是爬虫了(进行网页恳求的时侯,浏览器和requests.get都相当于带着一堆资格证去敲门,对方会检测你这种资格证,浏览器的资格证通常是可以通过的,而代码的资格证就可能不合格,因为代码的资格证可能有一些比较固定的特征,对方服务器预先设定好,资格证是这样的恳求一律拒绝,因为她们一定是爬虫,这就是反爬虫机制),这时就须要懂一些反反爬举措就能获得真正的信息,反反爬方式的学习是一个积累的过程,我们前面再讲。读者假如遇见一些反爬机制,可以到网上查这个网站的爬虫,估计都能查到一些博客讲怎么破解,甚至直接贴出代码。
在这篇的基础上抓取多页以及代码设计的改进看下边这三篇续集
爬虫代码改进(一)
爬虫代码改进(二)
爬虫代码改进(三)
专栏主页:python编程
专栏目录:目录
爬虫目录:爬虫系列目录
版本说明:软件及包版本说明
DISCUZ X3.2 采集教程 – 火车头采集器 V7.6 WEB发布配置管理
采集交流 • 优采云 发表了文章 • 0 个评论 • 827 次浏览 • 2020-04-23 11:04
一般做站的人基本上都晓得采集,尤其是做站群或则做峰会的人。但是现今网上的采集工具基本上都是收费的。而且不光软件收费,采集规则还收费。真是羊绒一把把的薅啊。像火车头这个软件,现在早已到 v9 了,但是精典款还是 v7.6 ,至于为何,你们自己心中应当有数。一般采集内容你们就会,直接定义起始点和结束点就可以了。而火车头带的这个 Web发布配置管理就有点麻烦了。本教程针对的是 Discuz X3.2 / X3.3 / X3.4
1. 打开WEB发布配置管理
打开火车头采集器 v7.6 - 工具 - Web发布配置管理
2. 新建规则
3. 网站自动登入配置
弹出一个新窗口,我们一个一个配置,先来这个登入配置,点击手动抓取登录数据包
4. 获取发布数据包
在以后弹出的窗口中输入 Discuz 论坛的地址(Forece 用的本地测试),然后登录你注册过的用户。在 Post 数据框那儿应当可以看见数据,然后点击确定。当然若果有的网站无法使用手动登入获取 POST 数据的话,你可以用 Fiddler 来获取 Post 数据。然后在上一个窗口中,选择粘贴 Post 数据。
Post 数据通常是长这个样的:
fastloginfield=username&username=forece&password=xxxxxxxxxxxxxx&quickforward=yes&handlekey=ls
复制代码
点击确定后,你可以听到大部分表格都早已填写完毕了
我们还须要再做一下更改,需要将 username 和 password 的表单值改为 [用户名] 和 [密码],另外还须要加一个登录失败标志码码和登录成功标志码。
登陆失败标志码
登录失败
登陆成功标志码
<script type="text/javascript" reload="1">
复制代码
最后截图如下:
5. 网页随机值获取
然后我们步入下一个 Tab ,网页随机值获取。获取这个数值的诱因是因为 Discuz 有一个称作 formhash 的东西。这玩意还不是固定的,每次都变。
然后依次填入以下数据:
获取页面:
/forum.php?mod=post&action=newthread&fid=2
复制代码
来源页面
/forum.php?mod=post&action=newthread&fid=2
复制代码
随机值前字符串
name="formhash" value="
复制代码
随机值后字符串
然后将 每次恳求都使用第一次获取的网页随机值 的选项关闭。
PS: 获取页面和来源页面是你发布贴子的页面。大家听到我旁边的 fid=2 是我的版块名称,请依照自己 Discuz 论坛的情况配置。
最后设置截图如下:
6. 内容发布参数
内容发布参数的设置和登录的有点类似,也是须要获取 Post 数据
登陆进峰会 - 选择发贴 - 填写标题 - 内容 - 按发贴 - 获取 Post 数据 - 按确定
Post 数据应当是这样的:
formhash=9c552f8e&posttime=1507576154&wysiwyg=1&subject=%E7%81%AB%E8%BD%A6%E5%A4%B4%E8%8E%B7%E5%8F%96+Post+%E6%95%B0%E6%8D%AE%E6%B5%8B%E8%AF%95%E5%B8%96&message=by+Forece&replycredit_extcredits=0&replycredit_times=1&replycredit_membertimes=1&replycredit_random=100&readperm=&price=&tags=&rushreplyfrom=&rushreplyto=&rewardfloor=&replylimit=&stopfloor=&creditlimit=&allownoticeauthor=1&usesig=1&save=
复制代码
按完确定后,表单数据获取完毕,我们还是须要更改一些表单。
formhash: [网页随机值1] posttime: [系统时间戳] subject: [标签:标题] message: [标签:内容]
发表错误标志码
抱歉,您的恳求来路不正确或表单验证串不符,无法递交
抱歉,您仍未输入标题或内容
成功标志码
帖子地址复制成功
最后截图如下:
7. HTML 转换为 UBB 标签
其实到现今这个Web发布规则早已配置完毕,但是由于 Discuz 用的是 UBB 标签而不是 HTML 标签,所以我们再稍为让这个发布规则更完美一些。进入中级功能,选择操作类型,标签填写 [标签:内容] ,CMS 选择 Discuz , 按确定。
然后回到内容发布规则里,将表单message里面的值替换成{0}
8. 命名规则
9. 保存配置
按照自己的情况来配置,是 UTF-8 就填写 UTF-8,是 GBK 就填写 GBK 别搞混了。
PS: 不知道为何保存完规则后网页随机值消失不见了,我测试的时侯仍然未能发布内容,重新把网页随机值加进去就好了。 查看全部
1. 打开WEB发布配置管理
打开火车头采集器 v7.6 - 工具 - Web发布配置管理
2. 新建规则
3. 网站自动登入配置
弹出一个新窗口,我们一个一个配置,先来这个登入配置,点击手动抓取登录数据包
4. 获取发布数据包
在以后弹出的窗口中输入 Discuz 论坛的地址(Forece 用的本地测试),然后登录你注册过的用户。在 Post 数据框那儿应当可以看见数据,然后点击确定。当然若果有的网站无法使用手动登入获取 POST 数据的话,你可以用 Fiddler 来获取 Post 数据。然后在上一个窗口中,选择粘贴 Post 数据。
Post 数据通常是长这个样的:
fastloginfield=username&username=forece&password=xxxxxxxxxxxxxx&quickforward=yes&handlekey=ls
复制代码
点击确定后,你可以听到大部分表格都早已填写完毕了
我们还须要再做一下更改,需要将 username 和 password 的表单值改为 [用户名] 和 [密码],另外还须要加一个登录失败标志码码和登录成功标志码。
登陆失败标志码
登录失败
登陆成功标志码
<script type="text/javascript" reload="1">
复制代码
最后截图如下:
5. 网页随机值获取
然后我们步入下一个 Tab ,网页随机值获取。获取这个数值的诱因是因为 Discuz 有一个称作 formhash 的东西。这玩意还不是固定的,每次都变。
然后依次填入以下数据:
获取页面:
/forum.php?mod=post&action=newthread&fid=2
复制代码
来源页面
/forum.php?mod=post&action=newthread&fid=2
复制代码
随机值前字符串
name="formhash" value="
复制代码
随机值后字符串
然后将 每次恳求都使用第一次获取的网页随机值 的选项关闭。
PS: 获取页面和来源页面是你发布贴子的页面。大家听到我旁边的 fid=2 是我的版块名称,请依照自己 Discuz 论坛的情况配置。
最后设置截图如下:
6. 内容发布参数
内容发布参数的设置和登录的有点类似,也是须要获取 Post 数据
登陆进峰会 - 选择发贴 - 填写标题 - 内容 - 按发贴 - 获取 Post 数据 - 按确定
Post 数据应当是这样的:
formhash=9c552f8e&posttime=1507576154&wysiwyg=1&subject=%E7%81%AB%E8%BD%A6%E5%A4%B4%E8%8E%B7%E5%8F%96+Post+%E6%95%B0%E6%8D%AE%E6%B5%8B%E8%AF%95%E5%B8%96&message=by+Forece&replycredit_extcredits=0&replycredit_times=1&replycredit_membertimes=1&replycredit_random=100&readperm=&price=&tags=&rushreplyfrom=&rushreplyto=&rewardfloor=&replylimit=&stopfloor=&creditlimit=&allownoticeauthor=1&usesig=1&save=
复制代码
按完确定后,表单数据获取完毕,我们还是须要更改一些表单。
formhash: [网页随机值1] posttime: [系统时间戳] subject: [标签:标题] message: [标签:内容]
发表错误标志码
抱歉,您的恳求来路不正确或表单验证串不符,无法递交
抱歉,您仍未输入标题或内容
成功标志码
帖子地址复制成功
最后截图如下:
7. HTML 转换为 UBB 标签
其实到现今这个Web发布规则早已配置完毕,但是由于 Discuz 用的是 UBB 标签而不是 HTML 标签,所以我们再稍为让这个发布规则更完美一些。进入中级功能,选择操作类型,标签填写 [标签:内容] ,CMS 选择 Discuz , 按确定。
然后回到内容发布规则里,将表单message里面的值替换成{0}
8. 命名规则
9. 保存配置
按照自己的情况来配置,是 UTF-8 就填写 UTF-8,是 GBK 就填写 GBK 别搞混了。
PS: 不知道为何保存完规则后网页随机值消失不见了,我测试的时侯仍然未能发布内容,重新把网页随机值加进去就好了。 查看全部
一般做站的人基本上都晓得采集,尤其是做站群或则做峰会的人。但是现今网上的采集工具基本上都是收费的。而且不光软件收费,采集规则还收费。真是羊绒一把把的薅啊。像火车头这个软件,现在早已到 v9 了,但是精典款还是 v7.6 ,至于为何,你们自己心中应当有数。一般采集内容你们就会,直接定义起始点和结束点就可以了。而火车头带的这个 Web发布配置管理就有点麻烦了。本教程针对的是 Discuz X3.2 / X3.3 / X3.4
1. 打开WEB发布配置管理
打开火车头采集器 v7.6 - 工具 - Web发布配置管理

2. 新建规则

3. 网站自动登入配置
弹出一个新窗口,我们一个一个配置,先来这个登入配置,点击手动抓取登录数据包

4. 获取发布数据包
在以后弹出的窗口中输入 Discuz 论坛的地址(Forece 用的本地测试),然后登录你注册过的用户。在 Post 数据框那儿应当可以看见数据,然后点击确定。当然若果有的网站无法使用手动登入获取 POST 数据的话,你可以用 Fiddler 来获取 Post 数据。然后在上一个窗口中,选择粘贴 Post 数据。

Post 数据通常是长这个样的:
fastloginfield=username&username=forece&password=xxxxxxxxxxxxxx&quickforward=yes&handlekey=ls
复制代码
点击确定后,你可以听到大部分表格都早已填写完毕了

我们还须要再做一下更改,需要将 username 和 password 的表单值改为 [用户名] 和 [密码],另外还须要加一个登录失败标志码码和登录成功标志码。
登陆失败标志码
登录失败
登陆成功标志码
<script type="text/javascript" reload="1">
复制代码
最后截图如下:

5. 网页随机值获取
然后我们步入下一个 Tab ,网页随机值获取。获取这个数值的诱因是因为 Discuz 有一个称作 formhash 的东西。这玩意还不是固定的,每次都变。

然后依次填入以下数据:
获取页面:
/forum.php?mod=post&action=newthread&fid=2
复制代码
来源页面
/forum.php?mod=post&action=newthread&fid=2
复制代码
随机值前字符串
name="formhash" value="
复制代码
随机值后字符串
然后将 每次恳求都使用第一次获取的网页随机值 的选项关闭。
PS: 获取页面和来源页面是你发布贴子的页面。大家听到我旁边的 fid=2 是我的版块名称,请依照自己 Discuz 论坛的情况配置。
最后设置截图如下:

6. 内容发布参数
内容发布参数的设置和登录的有点类似,也是须要获取 Post 数据

登陆进峰会 - 选择发贴 - 填写标题 - 内容 - 按发贴 - 获取 Post 数据 - 按确定

Post 数据应当是这样的:
formhash=9c552f8e&posttime=1507576154&wysiwyg=1&subject=%E7%81%AB%E8%BD%A6%E5%A4%B4%E8%8E%B7%E5%8F%96+Post+%E6%95%B0%E6%8D%AE%E6%B5%8B%E8%AF%95%E5%B8%96&message=by+Forece&replycredit_extcredits=0&replycredit_times=1&replycredit_membertimes=1&replycredit_random=100&readperm=&price=&tags=&rushreplyfrom=&rushreplyto=&rewardfloor=&replylimit=&stopfloor=&creditlimit=&allownoticeauthor=1&usesig=1&save=
复制代码
按完确定后,表单数据获取完毕,我们还是须要更改一些表单。


formhash: [网页随机值1] posttime: [系统时间戳] subject: [标签:标题] message: [标签:内容]
发表错误标志码
抱歉,您的恳求来路不正确或表单验证串不符,无法递交
抱歉,您仍未输入标题或内容
成功标志码
帖子地址复制成功
最后截图如下:

7. HTML 转换为 UBB 标签
其实到现今这个Web发布规则早已配置完毕,但是由于 Discuz 用的是 UBB 标签而不是 HTML 标签,所以我们再稍为让这个发布规则更完美一些。进入中级功能,选择操作类型,标签填写 [标签:内容] ,CMS 选择 Discuz , 按确定。

然后回到内容发布规则里,将表单message里面的值替换成{0}

8. 命名规则

9. 保存配置
按照自己的情况来配置,是 UTF-8 就填写 UTF-8,是 GBK 就填写 GBK 别搞混了。

PS: 不知道为何保存完规则后网页随机值消失不见了,我测试的时侯仍然未能发布内容,重新把网页随机值加进去就好了。
1. 打开WEB发布配置管理
打开火车头采集器 v7.6 - 工具 - Web发布配置管理

2. 新建规则

3. 网站自动登入配置
弹出一个新窗口,我们一个一个配置,先来这个登入配置,点击手动抓取登录数据包

4. 获取发布数据包
在以后弹出的窗口中输入 Discuz 论坛的地址(Forece 用的本地测试),然后登录你注册过的用户。在 Post 数据框那儿应当可以看见数据,然后点击确定。当然若果有的网站无法使用手动登入获取 POST 数据的话,你可以用 Fiddler 来获取 Post 数据。然后在上一个窗口中,选择粘贴 Post 数据。

Post 数据通常是长这个样的:
fastloginfield=username&username=forece&password=xxxxxxxxxxxxxx&quickforward=yes&handlekey=ls
复制代码
点击确定后,你可以听到大部分表格都早已填写完毕了

我们还须要再做一下更改,需要将 username 和 password 的表单值改为 [用户名] 和 [密码],另外还须要加一个登录失败标志码码和登录成功标志码。
登陆失败标志码
登录失败
登陆成功标志码
<script type="text/javascript" reload="1">
复制代码
最后截图如下:

5. 网页随机值获取
然后我们步入下一个 Tab ,网页随机值获取。获取这个数值的诱因是因为 Discuz 有一个称作 formhash 的东西。这玩意还不是固定的,每次都变。

然后依次填入以下数据:
获取页面:
/forum.php?mod=post&action=newthread&fid=2
复制代码
来源页面
/forum.php?mod=post&action=newthread&fid=2
复制代码
随机值前字符串
name="formhash" value="
复制代码
随机值后字符串
然后将 每次恳求都使用第一次获取的网页随机值 的选项关闭。
PS: 获取页面和来源页面是你发布贴子的页面。大家听到我旁边的 fid=2 是我的版块名称,请依照自己 Discuz 论坛的情况配置。
最后设置截图如下:

6. 内容发布参数
内容发布参数的设置和登录的有点类似,也是须要获取 Post 数据

登陆进峰会 - 选择发贴 - 填写标题 - 内容 - 按发贴 - 获取 Post 数据 - 按确定

Post 数据应当是这样的:
formhash=9c552f8e&posttime=1507576154&wysiwyg=1&subject=%E7%81%AB%E8%BD%A6%E5%A4%B4%E8%8E%B7%E5%8F%96+Post+%E6%95%B0%E6%8D%AE%E6%B5%8B%E8%AF%95%E5%B8%96&message=by+Forece&replycredit_extcredits=0&replycredit_times=1&replycredit_membertimes=1&replycredit_random=100&readperm=&price=&tags=&rushreplyfrom=&rushreplyto=&rewardfloor=&replylimit=&stopfloor=&creditlimit=&allownoticeauthor=1&usesig=1&save=
复制代码
按完确定后,表单数据获取完毕,我们还是须要更改一些表单。


formhash: [网页随机值1] posttime: [系统时间戳] subject: [标签:标题] message: [标签:内容]
发表错误标志码
抱歉,您的恳求来路不正确或表单验证串不符,无法递交
抱歉,您仍未输入标题或内容
成功标志码
帖子地址复制成功
最后截图如下:

7. HTML 转换为 UBB 标签
其实到现今这个Web发布规则早已配置完毕,但是由于 Discuz 用的是 UBB 标签而不是 HTML 标签,所以我们再稍为让这个发布规则更完美一些。进入中级功能,选择操作类型,标签填写 [标签:内容] ,CMS 选择 Discuz , 按确定。

然后回到内容发布规则里,将表单message里面的值替换成{0}

8. 命名规则

9. 保存配置
按照自己的情况来配置,是 UTF-8 就填写 UTF-8,是 GBK 就填写 GBK 别搞混了。

PS: 不知道为何保存完规则后网页随机值消失不见了,我测试的时侯仍然未能发布内容,重新把网页随机值加进去就好了。