【问题标题】:Scraping .php websites抓取 .php 网站
【发布时间】:2014-05-29 22:08:06
【问题描述】:

我在抓取以下网站内容时遇到了问题:http://www.qe.com.qa/wp/mw/MarketWatch.php

使用 file_get_contents() 永远不会让我得到正确的标签。我想抓取以下标签的内容:td aria- describeby="grid_OfferPrice"

网站是否受到保护,不会被抓取?因为当我在不同的网站上尝试相同的方法时,它会起作用。如果是,那么有什么好的解决方法?

【问题讨论】:

  • file_get_contents 返回网站的来源。虽然您的浏览器可能会执行一些 JavaScript,这些 JavaScript 可能会更新 HTML,并且您可能会在浏览器检查器中看到更改的内容。

标签: php web-scraping web-crawler


【解决方案1】:

查看抓取是否有效的方法是输出 file_get_contents 返回的内容。如果您没有任何回复或错误,那么您的 IP 可能已被他们的管理员限制。

如果它返回他们的源代码,那么它正在工作,但可能没有找到您正在寻找的标签。 通过首先回答这些问题来消除流程中的失败,一次一个。

我查看了他们的源代码,但您正在搜索的 aria 属性似乎不存在。

他们似乎从位于this page (http://www.qe.com.qa/wp/mw/bg/ReadData.php?Types=SELECTED&iType=SO&dummy=1401401577192&_search=false&nd=1401401577279&rows=100&page=1&sidx=&sord=asc) 的另一个来源加载该页面上的数据

如果您想要该页面中的数据,请直接在其上使用 file_get_contents。

online json editor 中来自该页面的数据为您提供了一种快速查看这是否对您有用的解决方案的简洁方法。

下面列出了该数据的一个示例:

{
  "total": "140",
  "page": "1",
  "records": "140",
  "rows": [
    {
      "Topic": "QNBK/NM",
      "Symbol": "QNBK",
      "CompanyEN": "QNB",
      "CompanyAR": "QNB",
      "Trend": "-",
      "StateEN": "Tradeable",
      "StateAR": "المتداوله",
      "CatEN": "Listed Companies",
      "CatAR": "الشركات المدرجة",
      "SectorEN": "Banks & Financial Services",
      "SectorAR": "البنوك والخدمات المالية",
      "ShariahEN": "N/A",
      "ShariahAR": "N/A",
      "OfferVolume": "7503",
      "OfferPrice": "184.00",
      "BidPrice": "182.00",
      "BidVolume": "15807",
      "OpenPrice": "190.0",
      "High": "191.7",
      "Low": "181.0",
      "IMP": "182.0",
      "LastPrice": "182.0",
      "PrevClosing": "187.0",
      "Change": "-5.0",
      "PercentChange": "-2.6737",
      "Trades": "980",
      "Volume": "2588830",
      "W52High": "199.0",
      "W52Low": "145.0",
      "Value": "481813446.4"
    },
    {
      "Topic": "QIBK/NM",
      "Symbol": "QIBK",
      "CompanyEN": "Qatar Islamic Bank",
      "CompanyAR": "المصرف ",
      "Trend": "+",
      "StateEN": ...

请务必阅读此链接about 'scraping' etiquette

【讨论】:

    【解决方案2】:
    Link: http://simplehtmldom.sourceforge.net/
    
    $dom = new DOMDocument();
    $dom->loadHTML(file_get_contents("EXAMPLE.COM");
    $items = $dom->getElementsByTagName("YOUR TAG");
    

    该类允许您在 HTML 代码中搜索元素。我之前使用过几次,它是迄今为止我为您的问题找到的最佳解决方案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多