我在想网络爬虫但是如何开始?

时间:2016-08-19 05:14:35

标签: python facebook

我在一家处理网络钓鱼和虚假Facebook帐户的公司工作。我想表达我对'#34;使命"的奉献精神。我们无法被动地监控Facebook页面被删除的时间。我正在考虑一个网络爬虫,但我很好奇如何设计一个不断检查特定链接,看看Facebook页面是否仍然活跃?我希望这有道理吗?

3 个答案:

答案 0 :(得分:1)

是的!您可以使用抓取功能。但是,如果您希望它尽可能快,爬行可能不是最好的方法。如果您对此感兴趣,我将使用HTTPConnection进行此操作。不幸的是,链接必须完全损坏。

如果您需要更多信息,那么您很可能必须使用API​​或网络抓取工具来检查链接是否已损坏(因此意味着它必须链接到无处),

from http.client import HTTPConnection # Importing HTTPConnection from http.client.

conn = HTTPConnection('www.google.com') # Connecting to 'google.com'

conn.request('HEAD', '/index.html') # Request data.
res = conn.getresponse() # Now we get the data sent back.

print(res.status, res.reason) # Finally print it.

如果它返回'302 Found'那么它应该是一个活动的网页, 我希望这有帮助!如果这不是你想要的,请告诉我。 :)

谢谢,

〜Coolq

答案 1 :(得分:0)

您可以通过响应状态发送http请求以告知帐户是否处于活动状态,Python有一些标准库,您可以查看Internet Protocols and Support。 就个人而言,我会建议使用请求:

import requests
response = requests.get("http://facebook.com/account")
if response.status_code == 302: # or 404
    # the page is missing

如果你真的关心速度或性能,你应该在Python中使用多处理或异步i / o(如gevent)。

如果您专注于抓取,可以查看Scrapy

  

在这里你会注意到Scrapy的一个主要优点:请求是   异步调度和处理。这意味着Scrapy没有   需要等待请求完成和处理,它可以发送   在此期间另一个请求或做其他事情。这也意味着   即使某些请求失败或其他请求,其他请求仍可继续   处理时发生错误。

答案 2 :(得分:0)

https://www.quora.com/How-can-I-build-a-web-crawler-from-scratch/answer/Raghavendran-Balu 我读过关于爬行者的最好的文章之一。

网络抓取工具可能听起来像一个简单的fetch-parse-append系统,但请注意!你可能会看到复杂性。我可能会偏离问题意图,更多地关注架构而不是特定于实现。我认为这是必要的,因为,为了构建Web规模的爬虫,爬虫的架构比选择语言/框架更重要。

<强>架构:

最小的爬虫至少需要这些组件:

  • HTTP Fetcher:从服务器检索网页。

  • 提取器:最少支持从页面中提取URL,如锚链接。

  • Duplicate Eliminator:确保无意中提取相同内容两次。将其视为基于集合的数据结构。

  • URL Frontier:优先处理必须提取和解析的URL。将其视为优先级队列

  • 数据存储:存储检索页面和URL以及其他元数据。

了解架构的一个很好的起点是:

  1. Web Crawling
  2. Crawling the Web
  3. Mercator: A scalable, extensible Web crawler
  4. UbiCrawler: a scalable fully distributed web crawler
  5. IRLbot: Scaling to 6 billion pages and beyond
  6. (单一服务器抓取工具)和MultiCrawler: a pipelined architecture
  7. 编程语言:任何您熟悉的具有良好网络库的高级语言都可以。我个人更喜欢Python / Java。由于您的爬虫项目可能会在代码大小方面增长,因此如果您使用受设计限制的编程语言进行开发,则很难管理。虽然可以仅使用unix命令和shell脚本构建爬虫,但出于显而易见的原因,您可能不希望这样做。

    框架/库:其他答案中已经提出了许多框架。我将在这里总结一下:

    1. Apache Nutch和Heritrix(Java):成熟,大规模,可配置
    2. Scrapy(Python):技术上是一个刮刀,但可以用来构建一个爬虫。

      您还可以访问https://github.com/scrapinghub/distributed-frontera - Scrapy的网址前端和数据存储空间,以便您进行大规模抓取。

    3. node.io(Javascript):Scraper。新生,但值得考虑,如果你准备好使用javascript。
    4. 对于Python:请参阅Introduction to web-crawling in Python

      Python中的代码:https://www.quora.com/How-can-I-build-a-web-crawler-from-scratch/answer/Rishi-Giri-1

      可扩展分布式抓取的建议

      1. 考虑到问题的本质,最好选择异步模型。
      2. 为数据存储选择分布式数据库。 HBASE。
      3. 像redis这样的分布式数据结构也值得考虑用于URL前端和重复检测器。
      4. 有关详细信息,请访问:https://www.quora.com/How-can-I-build-a-web-crawler-from-scratch

        <强>参考

        1. Olston,C。,&amp; Najork,M。(2010)。网页抓取。信息检索的基础和趋势,4(3),175-246。

        2. Pant,G.,Srinivasan,P。,&amp; Menczer,F。(2004)。抓取网络。在Web Dynamics中(第153-177页)。施普林格柏林海德堡。

        3. Heydon,A。,&amp; Najork,M。(1999)。 Mercator:可扩展,可扩展的网络爬虫。万维网,2(4),219-229。

        4. Boldi,P.,Codenotti,B.,Santini,M。,&amp; Vigna,S。(2004)。 Ubicrawler:可扩展的完全分布式网络爬虫。软件:实践与经验,34(8),711-726。

        5. Lee,H。T.,Leonard,D.,Wang,X。,&amp; Loguinov,D。(2009)。 IRLbot:扩展到60亿页甚至更多。网上ACM交易(TWEB),3(3),8。

        6. Harth,A.,Umbrich,J。,&amp; Decker,S。(2006)。 Multicrawler:用于对语义Web数据进行爬网和索引的流水线架构。在语义网 - ISWC 2006(第258-271页)中。施普林格柏林海德堡。