精华内容
下载资源
问答
  • 爬虫通用框架

    2019-07-07 13:24:00
    1 爬虫通用框架 2 import requests 3 4 def get_html_text(url): 5 try: 6 r =requests.get(url,timeout=20) 7 8 r.raise_for_status() 9 10 r.encoding = r.apparent...
     1 爬虫通用框架
     2 import requests
     3 
     4 def get_html_text(url):
     5     try:
     6         r =requests.get(url,timeout=20)
     7 
     8         r.raise_for_status()
     9 
    10         r.encoding = r.apparent_encoding
    11 
    12         return r.text
    13 
    14     except:
    15         return "产生异常"
    16 
    17 if __name__ == '__main__':
    18     url ="http://www.baidu.com"
    19     print(get_html_text(url))
    20 
    21 
    22 实例
    23 import requests
    24 from bs4 import BeautifulSoup
    25 
    26 def getHTMLText(url):
    27     try:
    28         r = requests.get(url,timeout=20) #设置超时
    29         r.raise_for_status()   # 判断请求是否成功
    30         r.encoding = r.apparent_encoding  # 设置编码
    31         return r.text   # 返回获取内容
    32     except: #异常处理
    33         return "产生异常"
    34 
    35 if __name__ == '__main__':
    36     url = "https://book.douban.com/subject/1084336/comments/"  # 需要请求的网址
    37     # print(getHTMLText(url)) #调用函数
    38     requests = getHTMLText(url)  # 获取文本内容
    39     soup = BeautifulSoup(requests,"html.parser")  # 文本解析
    40     reasult = soup.find_all("div",class_="comment") # 文本处理
    41     for i in reasult :
    42         print(i.p.text)  # 循坏打印文本

     

    转载于:https://www.cnblogs.com/mai1994/p/11146063.html

    展开全文
  • 爬虫架构

    千次阅读 2019-05-21 18:06:51
    爬虫的总体架构

    爬虫的总体架构:

     

     

    展开全文
  • 网络爬虫架构

    千次阅读 2018-01-02 11:46:20
    与第二期介绍的通用爬虫架构不同,下面是一个聚焦爬虫的架构图,与前者相比,它不仅要保存网页,还要提取出网页中的指定内容。 Crawler_core  从任务队列获取爬虫任务,请求网页并将其存储到Mongodb,...


    下面是一个超级计算机的排行榜,如果我们能拥有其中任意一个,那么我们就不需要搞什么分布式系统。可是我们买不起,即使买得起,也交不起电费,所以我们只好费脑子搞分布式。

    分布式的本质就如上期提到的一个概念:分布式系统是若干独立计算机的集合,这些计算机对于用户来说就像是单个相关系统。这就是在说,把廉价的计算机堆到一起,通过程序控制,使其整体用起来像个高性能计算机,目的就是节约成本。

    对于分布式爬虫系统来说,假设1台机器能10天爬完一个任务,如果部署10台机器,那么1天就会完成这个任务。这样就用可以接受的成本,让系统的效率提高了十倍。之前介绍的单机架构是达不到这种效果的,是时候介绍新的架构了!

     

    架构概述

    与第二期介绍的通用爬虫架构不同,下面是一个聚焦爬虫的架构图,与前者相比,它不仅要保存网页,还要提取出网页中的指定内容。

    Crawler_core  从任务队列获取爬虫任务,请求网页并将其存储到Mongodb,同时解析出网页中的URLs并缓存到Redis。最后通知Common-clean-platform抽取网页的指定字段。

    Common-clean-platform  收到Crawler_core的通知后,从Mongodb中取出网页,根据配置进行数据抽取,形成结构化的数据,保存到Mongodb。

    Scheduler_manager  负责任务调度(如启停),状态控制(如爬取数量),redis资源清理等。

    Resource_manager  封装Mysql、Mongodb、Redis接口。Mysql存储任务基本信息、配置文件、任务实时状态等。Mongodb存储网页、结构化数据。Redis缓存队列、集合等数据结构。

    Proxy 代理服务器  建立网络爬虫的第一原则是:所有信息都可以伪造。你可以用非本人的邮箱发送邮件,或者通过命令行自动化鼠标的行为。但是有一件事情是不能作假的,那就是你的IP地址。如果你在爬取的过程中不想被人发现,或者不想IP被封杀,那么就需要使用代理。

    笔者以前看过一个电影叫《Who Am I - No System Is Safe》,剧中的黑客老大“Who AmI”就用代理来隐藏自己,躲避FBI和其他黑客组织的追踪。

    不过最终他还是被抓了,看来即使用了炫酷的技术,也不是绝对安全的。

    如果你也想体验一下匿名访问网络,可以试试Tor代理服务器。洋葱路由(The Onion Router)网络,常用缩写为Tor,是一种IP 地址匿名手段。由网络志愿者服务器构建的洋葱路由器网络,通过不同服务器构成多个层(就像洋葱)把客户端包在最里面。数据进入网络之前会被加密,因此任何服务器都不能偷取通信数据。另外,虽然每一个服务器的入站和出站通信都可以被查到,但是要想查出通信的真正起点和终点,必须知道整个通信链路上所有服务器的入站和出站通信细节,而这基本是不可能实现的。

    Tor是人权工作者和政治避难人员与记者通信的常用手段,得到了美国政府的大力支持。当然,它经常也被用于非法活动,所以也是政府盯防的目标(虽然目前盯防得并不是很成功)。


    流程控制 – 任务

    Scheduler_manager定时读取Mysql中的任务信息,根据任务的周期等配置进行调度,下面是一个最基本的任务启停流程。

    1. 当一个任务可以开始时,Scheduler_manager会将其基本信息(包括task_id,种子url,启动时间等)插入Reids的任务队列中。如果任务结束,就从队列中删除。

    2.  每个Crawler_core实例定时读取Redis任务队列中的任务,插入到本地的内存任务队列中。

    3. 相同的任务可以存在于不同的Crawler_core实例中,一个Crawler_core实例中也可以有相同的任务。

    4. Crawler_core的抓取线程从内存队列中获得可执行的任务,依次抓取和解析。

    流程控制 – 数据

    现在每个Crawler_core实例都有了待处理的任务,接下来就要对每个任务的url进行处理了。继续使用Redis作为公共缓存来存放URLs,多个Crawler_core实例并行存取todo集合。

    1.  Todo集合  Crawler_core从集合中取出url进行处理,并将解析得到的url添加到todo集合中。

    2. Doing集合  Crawler_core从todo中取出url,都同时保存到doing中,url处理完成时被从doing中删除。主要用于恢复数据。

    3. Parser todo队列  Crawler_core将已经保存到mongodb的页面的url发送到parser todo队列,Parser读取数据后进行解析。

    4. Filter todo队列  Parser将已经保存到mongodb的解析结果的url发送到filtertodo队列,Filter读取数据后进行清洗。

    流程控制 – 状态

    蓝色箭头 业务模块实时更新任务状态到Redis,StateObserver读取到Redis状态后,更新到mysql。

    红色箭头 ClearObserver定时读取Mysql状态,若任务完成或中止,则清除任务所有的Redis key。

    Redis中的任务信息如下表所示:




    流程控制 – failover

    如果一个Crawler_core的机器挂掉了,就会开始数据恢复程序,把这台机器所有未完成的任务恢复到公共缓存中。

    1. 监控到192.168.0.1心跳停止。

    2. Master遍历正在运行的任务: task_jdjr:1489050240345等。

    3. 得到doing和todo集合:

      a)    task_jdjr:1489050240345:crawler:doing:192.168.0.1

      b)    task_jdjr:1489050240345:crawler:todo

    4.  将doing中的数据全部移动到todo中。

    展开全文
  • 爬虫架构设计

    千次阅读 2017-04-15 01:03:31
    爬虫是偏IO型的任务,分布式爬虫的实现难度比分布式计算和分布式存储简单得多。  个人以为分布式爬虫需要考虑的点主要有以下几个: 爬虫任务的统一调度 爬虫任务的统一去重 存储问题 速度问题 足够“健壮”的...

    前言:

    爬虫是偏IO型的任务,分布式爬虫的实现难度比分布式计算和分布式存储简单得多。 
    个人以为分布式爬虫需要考虑的点主要有以下几个:

    • 爬虫任务的统一调度
    • 爬虫任务的统一去重
    • 存储问题
    • 速度问题
    • 足够“健壮”的情况下实现起来越简单/方便越好
    • 最好支持“断点续爬”功能

    Python分布式爬虫比较常用的应该是scrapy框架加上Redis内存数据库,中间的调度任务等用scrapy-redis模块实现。 
    此处简单介绍一下基于Redis的三种分布式策略,其实它们之间还是很相似的,只是为适应不同的网络或爬虫环境作了一些调整而已(如有错误欢迎留言拍砖)。 

     

     

    【策略一】

    分布式爬虫策略一 
    Slaver端从Master端拿任务(Request/url/ID)进行数据抓取,在抓取数据的同时也生成新任务,并将任务抛给Master。Master端只有一个Redis数据库,负责对Slaver提交的任务进行去重、加入待爬队列。

    优点: scrapy-redis默认使用的就是这种策略,我们实现起来很简单,因为任务调度等工作scrapy-redis都已经帮我们做好了,我们只需要继承RedisSpider、指定redis_key就行了。 
    缺点: scrapy-redis调度的任务是Request对象,里面信息量比较大(不仅包含url,还有callback函数、headers等信息),导致的结果就是会降低爬虫速度、而且会占用Redis大量的存储空间。当然我们可以重写方法实现调度url或者用户ID。 

     

     

    【策略二】

    分布式爬虫策略二
    这是对策略的一种优化改进:在Master端跑一个程序去生成任务(Request/url/ID)。Master端负责的是生产任务,并把任务去重、加入到待爬队列。Slaver只管从Master端拿任务去爬。

    优点: 将生成任务和抓取数据分开,分工明确,减少了Master和Slaver之间的数据交流;Master端生成任务还有一个好处就是:可以很方便地重写判重策略(当数据量大时优化判重的性能和速度还是很重要的)。 
    缺点: 像QQ或者新浪微博这种网站,发送一个请求,返回的内容里面可能包含几十个待爬的用户ID,即几十个新爬虫任务。但有些网站一个请求只能得到一两个新任务,并且返回的内容里也包含爬虫要抓取的目标信息,如果将生成任务和抓取任务分开反而会降低爬虫抓取效率。毕竟带宽也是爬虫的一个瓶颈问题,我们要秉着发送尽量少的请求为原则,同时也是为了减轻网站服务器的压力,要做一只有道德的Crawler。所以,视情况而定。 

     

     

    【策略三】

    分布式爬虫策略三 
    Master中只有一个集合,它只有查询的作用。Slaver在遇到新任务时询问Master此任务是否已爬,如果未爬则加入Slaver自己的待爬队列中,Master把此任务记为已爬。它和策略一比较像,但明显比策略一简单。策略一的简单是因为有scrapy-redis实现了scheduler中间件,它并不适用于非scrapy框架的爬虫。

    优点: 实现简单,非scrapy框架的爬虫也适用。Master端压力比较小,Master与Slaver的数据交流也不大。 
    缺点: “健壮性”不够,需要另外定时保存待爬队列以实现“断点续爬”功能。各Slaver的待爬任务不通用。 

     

    结语:

    如果把Slaver比作工人,把Master比作工头。策略一就是工人遇到新任务都上报给工头,需要干活的时候就去工头那里领任务;策略二就是工头去找新任务,工人只管从工头那里领任务干活;策略三就是工人遇到新任务时询问工头此任务是否有人做了,没有的话工人就将此任务加到自己的“行程表”。 

     

    展开全文
  • YayCrawler是一个基于WebMagic开发的分布式通用爬虫框架,开发语言是Java。我们知道目前爬虫框架很多,有简单的,也有复杂的,有轻 量型的,也有重量型的。您也许会问:你这个爬虫框架的优势在哪里呢?额,这个是一...
  • 分布式多爬虫系统——架构设计

    万次阅读 多人点赞 2017-02-12 23:52:06
    前言:在爬虫的开发过程中,有些业务场景需要同时抓取几百个甚至上千个网站,此时就需要一个支持多爬虫的框架。在设计时应该要注意以下几点: 代码复用,功能模块化。如果针对每个网站都写一个完整的爬虫,那其中...
  • 阅读本文大约需要15~20分钟。本文章内容较多,非常干货!如果手机阅读体验不好,建议先收藏后到 PC 端阅读。之前做爬虫时,在公司设计开发了一个通用的垂直爬虫平台,后来在公司做了内部的技...
  • python爬虫通用框架

    2019-02-23 11:46:45
    import requestsdef getHTMLText(url):try:r = requests.get(url,timeout=30)r.raise_for_status() # 如果状态不是200,引发HTTP-Error异常#print(r.status_code)r.encoding = r.apparent_encodingreturn r.textexc....
  • import requests def getHTMLText(url): try: r = requests.get(url,timeout=30) r.raise_for_status() r.encoding = r.apparent_encoding return r.text except: ...
  • 简单的爬虫架构

    2019-02-13 23:13:00
    爬虫架构 URL管理器对将要爬取的url和已经爬取过的url进行管理。取出待爬取的url传给网页下载器。 网页下载器将url指定的网页下载下来,存储成字符串,传给网页解析器进行解析。 网页解析器从网页字符串内容中取出...
  • 爬虫的基本原理及其架构

    千次阅读 2019-11-15 12:20:11
    架构 1.总述 通常,访问一个网页,需要一个初始URL,然后通过这个页面的超链接才能跳转到其他页面。同理,一个爬虫通过初始URL列表(种子链接)访问到初始网页,并提取其中的URL添加到工作队列,判断该工作队列的...
  • 海量数据采集爬虫架构

    千次阅读 2016-03-24 15:57:58
    随着BIG DATA大数据概念逐渐升温,如何搭建一个能够采集海量数据的架构体系摆在大家眼前。如何能够做到所见即所得的无阻拦式采集、如何快速把不规则页面结构化并存储、如何满足越来越多的数据采集还要在有限时间内...
  • 如何设计一个比较通用爬虫系统 文章目录如何设计一个比较通用爬虫系统背景介绍页面差异结果集不同要发送哪些结果给用户怎么发送这些数据给用户项目依赖介绍表结构代码类间关系操作流程 背景介绍 最近老大让我...
  • 截图首页爬虫列表爬虫详情 - 概览任务详情 - 抓取结果架构Crawlab 的架构跟 Celery 非常相似,但是加入了包括前端、爬虫、Flower 在内的额外模块,以支持爬虫管理的功能。节点节点其实就是 Celery 中的 Worker。一个...
  • 通用爬虫和聚焦爬虫 四. Nutch搜索引擎 五. 爬虫实例分析:舆情信息汇聚 一. 互联网信息抓取 随着网络的迅速发展,Internet (万维网)成为当今世界最大的信息载体,每天又有不可计数的新数据涌入Internet 中...
  • 1、写在前面的话 咱们直接进入今天的主题---你真的会写爬虫吗?...2、基础爬虫架构以及运行流程 首先,给大家来讲讲基础爬虫架构到底是啥样子的?JAP君给大家画了张粗糙的图: 从图上可以看到,整个基...
  • 这些站点一般被一个单独的 Scrapy spider 进行处理, 不过这并不是必须或要求的(例如,也有通用爬虫能处理任何给定的站点)。 除了这种爬取完某个站点或没有更多请求就停止的”专注的爬虫”,还有一种通用的爬取...
  • 在这里准备花时间介绍一个新闻通用爬虫的设计和实现,这个爬虫主要实现了新闻采集,新闻解析,新闻存储,新闻展示。以架构思路为主。现在此系统仍在稳定实时运行,可点击月球速递,或添加链接描述 进行访问查看 项目...
  • 一、通用爬虫 通用爬虫一般有以下通用特性: 爬取大量(一般来说是无限)的网站而不是特定的一些网站。 不会将整个网站都爬取完毕,因为这十分不实际(或者说是不可能)完成的。相反,其会限制爬取的时间及数量。 在逻辑...
  • 阅读本文大约需要15~20分钟。本文章内容较多,非常干货!如果手机阅读体验不好,建议先收藏后到 PC 端阅读。之前做爬虫时,在公司设计开发了一个通用的垂直爬虫平台,后来在公司做了内部的技...
  • 爬虫架构理解

    2018-11-19 17:29:00
    个人以为分布式爬虫需要考虑的点主要有以下几个:爬虫任务的统一调度爬虫任务的统一去重存储问题速度问题足够“健壮”的情况下实现起来越简单/方便越好最好支持“断点续爬”功能Python分布式爬虫比较常用的应该是...
  • 通用爬虫(Broad Crawls) Scrapy默认对特定爬取进行优化。这些站点一般被一个单独的Scrapy spider进行处理, 不过这并不是必须或要求的(例如,也有通用的爬虫能处理任何给定的站点)。 除了这种爬取完某个站点或没有...
  • 下面以比较典型的通用爬虫为例,分析其工程要点,设计并实现一个迷你框架。架构图如下:     迷你框架 代码结构:     代码结构 config_load.py 配置文件加载 crawl_thread.py...
  • #Crawlie – 通用网络爬虫 ##特征 自定义优先级/启发式功能来引导网络爬虫 永远不要去同一个地方两次! 海量并行化,自己决定你想走多远! 从任何发现的页面返回到种子的树遍历 自动将您的结果存储到一个整洁的...
  • 通用爬虫(Broad Crawls)

    2018-05-10 11:18:01
    Scrapy默认对特定爬取进行优化。这些站点一般被一个单独的Scrapy spider进行处理, 不过这并不是必须或要求的(例如,也有通用的爬虫能... 这种爬虫叫做”通用爬虫(broad crawls)”,一般用于搜索引擎。通用爬虫一...
  • 它是一个非常强大的爬虫框架,可以满足简单的页面爬行,例如可以清楚地了解网址。使用该框架,您可以轻松爬上亚马逊商品信息等数据。但是对于稍微复杂一点的页面,比如weibo的页面信息,这个框架不能满足需求。它的...
  • ​​​​一个迷你框架下面以比较典型的通用爬虫为例,分析其工程要点,设计并实现一个迷你框架。架构图如下:​代码结构:​config_load.py 配置文件加载crawl_thread.py 爬取线程mini_spider.py 主线程spider.conf ...
  • 用python写一个豆瓣通用爬虫并可视化分析

    万次阅读 多人点赞 2020-10-24 09:06:02
    然而我所在的组刚好遇到的是python爬虫的小课题。 心想这不是很简单嘛,搞啥呢?想着去搞新的时间精力可能不太够,索性自己就把豆瓣电影的评论(短评)搞一搞吧。 之前有写过哪吒那篇类似的,但今天这篇要写的像姨母般...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 10,186
精华内容 4,074
关键字:

通用的爬虫架构

爬虫 订阅