php 抓取网页ajax数据(客户端索引网页内部链接的最佳做法-嗨,大家好)

优采云 发布时间: 2021-12-15 10:23

  php 抓取网页ajax数据(客户端索引网页内部链接的最佳做法-嗨,大家好)

  大家好你们好!

  对于客户,我正在采集有关构建搜索引擎/网络蜘蛛组合的信息。我在索引网页的内部链接方面确实有一定的经验。我也有从网页中抓取数据的经验。但是,在这种情况下,体积大于我的经验,因此我希望获得一些最佳实践的知识和洞察力。

  首先需要说明的是,客户端会提供一个网站 的列表来进行索引。所以,它实际上是一个垂直搜索引擎。结果只需要一个链接、标题和描述(比如谷歌显示结果的方式) 这个搜索引擎的主要目的是让访问者更容易搜索到大量的网站和结果找到他们需要的东西。

  所以:网站 A 收录一堆链接 -> 保存所有带有元数据的链接。

  其次,有一个更具体的搜索引擎。一个文章,也链接到所有的链接(姑且称之为),这些文章分布在许多更小的网站中,最终与垂直搜索引擎中的网站相比, 文章 的数量较少。原因很简单:在这些页面上发现的文章必须尽可能删除。这是第一个问题,为每个网站写一个scraper需要很多时间。需要采集的数据为:城市名称、文章日期、文章标题。所以:网站B 收录比 网站A 更详细的 文章,我们将索引这些 文章 并抓取有用的数据。

  我确实有一个可能在我脑海中起作用的方法,但这涉及为每个网站编写一个scraper,实际上这是我现在唯一能想到的解决方案。因为每个页面的 DOM 完全不同,我看没有办法构建一个傻瓜式算法,搜索 DOM 并“知道”页面的哪一部分是一个位置(但是,如果你能匹配文本,这是对城市完整列表的可能性)。

  我想到的一些事情:

  垂直搜索引擎

  > 对于垂直搜索引擎,很简单,我们有一个需要索引的网页列表,抓取所有匹配正则表达式的页面,并将这些URL的完整列表存储在数据库中应该是相当简单的。

  我可能想将保存页面数据(元描述、标题等)拆分为一个单独的进程以加快索引速度。

  > 由于网站有匹配结果/文章,本搜索引擎中可能存在重复数据。没想到怎么过滤这些重复项,可能在文章标题上,但是在业务部门,数据来自重复的标题,但是不同的文章有巨大的变化

  页面抓取

  只要我们知道哪些正则表达式与 URL 匹配,我们就可以以类似的方式索引“剪辑页面”。我们可以将 URL 列表保存在数据库中

  使用一个单独的进程,根据 URL 运行所有单独的页面,刮板现在应该使用哪些正则表达式来匹配页面上所需的详细信息,并将其写入数据库

  > 足够的 网站 已经索引了结果,所以我想应该有一种方法可以创建一种知道如何读取页面而不必完全匹配正则表达式的抓取算法。如前所述:如果我有完整的城市名称列表,则必须可以选择使用搜索算法来获取城市名称,更不用说城市名称位于“#content .about .city” .

  数据冗余

  蜘蛛/爬虫的重要部分是防止它索引重复数据。我想要做的是跟踪爬虫什么时候开始索引网站,什么时候结束,然后我还会跟踪文章“最后更新时间”(根据文章的URL ) 并删除所有早于抓取开始时间的文章。因为据我所知,这些文章已经不存在了。

  由于我的客户列出了“好的来源”(阅读:具有唯一 文章 的页面),页面抓取工具的数据冗余更容易。由于索引的文章 @网站 自己选择了一个“好资源”,因此垂直搜索引擎的数据冗余更加困难。所以有可能多个 网站 从同一个来源中选择。

  如何使结果可搜索

  除了抓取和抓取页面之外,这是一个问题,因为一旦所有数据都存储在数据库中,就需要高速搜索。将保存的数据量还是未知数,相比于一些竞争对手,我的客户显示有大约 10,000 条较小的记录(垂直搜索),也可能有 4,000 条较大的记录,信息更详细。

  我知道与您可能正在处理的某些数据库相比,这仍然是一小部分。但最终可能会有 10 到 20 个搜索字段供用户用来查找他们要查找的内容。由于流量和搜索量很大,我可以想象,使用常规 MySQL 查询进行搜索并不是一个聪明的主意。

  到目前为止,我找到了 SphinxSearch 和 ElasticSearch。我没有与任何人合作,也没有真正研究过两者的可能性,只有我知道两者都应该在数据中用于大型和更大的搜索查询 在中国表现良好。

  综上所述

  总而言之,这里是一个简短的问题清单:

  > 有没有一种简单的方法可以创建一个可以匹配 DOM 数据的搜索算法,而无需指定内容所在的确切 div?

  > 抓取网页(链接、标题和描述)的最佳实践是什么

  >我应该拆分抓取网址并保存页面标题/描述速度吗?

  > 有没有现成的PHP解决方案,可以在数据库中找到(可能)复制数据(即使有细微差别,例如:如果80%匹配->标记为重复)

  > 为数据创建面向未来的搜索引擎的最佳方法是什么(请记住,数据量可以增加网站 流量和搜索请求的数量)

  我希望我把一切都说清楚了,对于大量的文字,我深表歉意。我认为这确实表明我花了一些时间试图弄清楚自己。

  找出您的应用程序可以逻辑拆分的位置

  对我来说,这意味着构建 3 个不同的部分:

  > 网络爬虫管理器

  > 网络爬虫

  > HTML 处理器

  那么这样的工作可以划分如下:

  1) 网络爬虫管理器

  Web Scraper Manager 拖动要抓取的 URL 并生成 Web Scraper。Web Scraper Manager 需要将所有发送到 Web Scraper 的 URL 标记为“actively scraped”,并且知道在那个状态下不会被下拉 收到来自 Scraper 的消息后,如果没有错误,管理员会删除该行或将其置于“主动抓取”状态,否则将重置为“非活动”

  2) 网络爬虫

  网络爬虫将收到一个 URL,然后浏览和下载 HTML。然后,所有这些 HTML 都可以存储在具有以下结构的关系数据库中

  *敏*感*词* | 网址 | HTML (BLOB) | 加工

  Processing 是一个整数标志,指示当前是否正在处理数据。这让其他解析器知道如果他们已经在查看数据,他们将不会提取数据。

  3) HTML 处理器

  HTML 处理器将继续从 HTML 表中读取并将该行标记为活动,只要他们拉入新条目。只要有任何数据需要解析,HTML 处理器就可以自由地操作 HTML。这可以是指向站点的链接,您可以将其放回 URL 表中的其他页面以重新启动该过程、任何相关数据(元标记等)、图像等。

  解析完所有相关数据后,HTML 处理器会将所有这些数据发送到 ElasticSearch 集群。ElasticSearch 提供了闪电般的全文搜索,可以通过将数据拆分为各种键来更快地搜索:

  {

"url" : "http://example.com","Meta" : {

"title" : "The Meta title from the page","description" : "The Meta description from the page","keywords" : "the,keywords,for,this,page"

},"body" : "The body content in it's entirety","images" : [

"image1.png","image2.png"

]

}

  现在您的 网站/service 可以实时访问最新数据了。解析器需要足够冗长以处理任何错误,因此如果处理标志无法将数据拉出,或者至少将其记录在某处以便可以对其进行检查,则可以将处理标志设置为 false。

  有哪些优势?

  这种方法的好处是,在任何时候,如果你想改变提取数据、处理数据或存储数据的方式,你只需要改变那部分,而不用重新构建整个应用程序。另外,如果你scrape/apply 有一部分坏掉了,剩下的可以继续运行而不会丢失任何数据,而不会停止其他进程

  有什么缺点?

  这是一个复杂的系统。任何时候您有一个复杂的系统,您都会要求出现大而复杂的错误。不幸的是,网页抓取和数据处理是一项复杂的工作。根据我的经验,我无法为这个复杂问题提供一个特殊的解决方案提供一个复杂的解决方案。

  总结

  以上是本站为大家采集的php-grab特定页面和数据使其可搜索所有内容,希望文章可以帮助您解决php-grab特定页面和数据使其可搜索的程序问题发展。

  如果您觉得本站网站的内容还不错,欢迎向程序员朋友推荐本站网站。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线