网页中flash数据抓取(Python写一个简单的程序-实现一个强大的采集过程 )
优采云 发布时间: 2021-10-01 04:17网页中flash数据抓取(Python写一个简单的程序-实现一个强大的采集过程
)
首先,我们来看看如果是正常的人类行为,如何获取网页内容。Python
(1)打开浏览器,输入网址,打开源码网页
(2)选择我们想要的内容,包括标题、作者、摘要、正文等信息
(3)存储到硬盘
以上三个过程映射到技术层面,其实就是:网络请求、结构化数据捕获、数据存储。
下面我们用Python写一个简单的程序来实现上面简单的抓取功能。
[Python]
#!/usr/bin/python #-*- coding: utf-8 -*-'' 创建于 2014-03-16 @author: Kris''' import def''' @summary: Web scraping''' def ''' @summary: 网络请求''' try,),) finally if return def''' @summary: 抓取结构化数据''' if] return def''' @summary: 数据存储''' ,) if : httpCrawler(url)
看起来很简单,没错,就是一个爬虫入门的基础程序。当然,在一个采集的实现过程中,无非就是上面几个基本步骤。但是要实现一个强大的采集进程,会遇到以下问题:
(1) 访问需要带cookie信息。就像大多数社交软件一样,基本上需要登录才能看到有价值的东西。其实很简单,我们可以使用Python提供的cookielib模块,意识到每次访问时,我们都会带着源网站给出的cookie信息进行访问,所以只要我们成功模拟登录并且爬虫处于登录状态,那么我们就可以采集查看登录用户看到的所有信息,以下是使用cookies对httpRequest()方法的修改:web
[Python]
ckjar = cookielib.MozillaCookieJar() def''' @summary: network request''' try,),) finally if return ret
(2)编码问题。网站目前最多的两种编码:utf-8,或者gbk,当我们的采集回源网站编码与存储在我们的数据库,比如编码使用gbk的时候,而我们需要存储的是utf-8编码的数据,那么我们就可以使用Python中提供的encode()和decode()方法进行转换,例如:
[Python]
content = content.decode(,),)
中间出现unicode编码,我们需要转换成中间编码unicode才能转换成gbk或者utf-8。
(3)网页中的标签不完整,像一些源代码有开始标签,但没有结束标签,HTML标签不完整,会影响我们对结构化数据的抓取,我们可以通过Python的BeautifulSoup模块, 先清理源码,再分析内容。
(4)有些网站用JS来让网页内容存活下来,直接看源码,发现是一堆头疼的东西。可以用mozilla、webkit等来解析browser 工具包解析js和ajax,虽然速度会稍微慢一些。
(5)图片以flash的形式存在,当图片中的内容是文字或数字组成的字符时,这样比较好处理。只要使用ocr技术,就可以实现自动识别,但是如果是flash Connect,我们已经存储了整个URL。
(6)一个网页有多种网页结构,所以如果我们只是一套爬取规则,那肯定不行,所以需要配置多套模拟来辅助爬取。
(7)响应源头监控网站。抢别人的东西毕竟不是什么好事,所以通常网站都会有禁止爬虫访问的限制。
一个好的采集系统应该是无论我们的目标数据在哪里,只要用户能看到,我们就可以采集回来。所见即所得的非阻塞式采集,无论是否需要登录数据,都可以顺利进行采集。最有价值的信息通常需要登录才能看到,比如社交网站。为了应对登录,网站必须有模拟用户登录的爬虫系统才能正常获取数据。然而,社交网站希望它自己创造一个闭环,拒绝将数据下站。这个系统不会像新闻和其他内容那样开放。这些社交网站大多会采取一些限制措施来防止机器人爬虫系统爬取数据。通常,爬行后将检测到帐户并阻止其访问。是不是因为我们爬不出来这些网站的数据?我确定事实并非如此。只要社交网站不关闭网页访问,我们也可以访问普通人可以访问的数据。毕竟是模拟人类的正常行为。专业的叫“反*敏*感*词*”。
Source 网站 通常有以下限制:
一、一定时间内单个IP的访问次数,一是频繁允许用户访问网站,除非是随便点击播放,否则不会在短时间内访问太快一段时间网站 ,持续时间不会太长。这个问题很容易处理。我们可以使用大量不规则的代理IP来创建代理池,从代理池中随机选择代理来模拟访问。代理IP有两种,透明代理和匿名代理。
二、 一定时间内单个账号的访问次数。如果我一天24小时访问一个数据接口,而且速度非常快,那么机器人就很多了。我们可以使用大量具有正常行为的帐户。正常的行为就是普通人在社交网站上是怎么做的,单位时间内要访问的网址尽量少,这样每次访问之间就有一段时间。这个时间间隔可以是一个随机值,即每次访问一个网址,都会随机休眠一段时间,然后再访问下一个网址。
如果可以控制账号和IP访问策略,就没有问题。虽然对手网站也会有运维会议调整策略,敌我较量,爬虫必须能够感知到对手的反监控会对我们造成影响,并通知管理员以便及时处理。其实最理想的就是通过机器学习智能实现反*敏*感*词*对抗,实现不间断抓拍。阿贾克斯
下面是我最近设计的一个分布式爬虫架构图,如图1所示: 数据库
图 1 浏览器
这纯粹是笨拙的。初步设想正在实现中。正在建立服务器和客户端之间的通信。Python的Socket模块主要用于实现服务端和客户端的通信。如果你有兴趣,可以单独联系我,一起讨论,共同完成一个更好的计划。服务器
没有整理和泛化的知识,就一文不值!高度概括和整理的知识本身就是真正的知识和技能。永远不要让自己的自由、好奇、创意被现实框架束缚,让创意自由成长!多花点时间关心他(她),就像别人关心你一样。没有别人的支持和帮助,理想的起飞和实现是绝对不可能的。
相关学习资料搬家:
曲奇饼