【问题标题】:Webscraping doesnt return the expected html?Web Scraping 不返回预期的 html?
【发布时间】:2019-03-12 13:36:15
【问题描述】:

在购物应用程序上工作了一段时间(正在工作),现在正在寻求扩展功能,但是我对网站元素/文件 hierakis 等的理解至少可以说是乏善可陈!

我正在阅读这个网址:https://minetilbud.dk/tilbudsaviser/aldi/1?id={E2193C06-1136-4ED7-9B66-693C3EB175FF}

我正在寻找的是包含“30,- 每公斤”的文本部分。然而,当我以编程方式阅读 html 时,我得到了大量不包含此特定所需文本的文本。

抱歉,我的问题解释得很糟糕,但我不确定我在这里要找什么,我要找的文字可以隐藏吗? 在另一个文件中? 另一个网址?

任何可以帮助我朝着正确方向前进的提示将不胜感激!

【问题讨论】:

  • 文本可以通过 Ajax 调用 (JavaScript) 轻松获取,
  • 您使用什么库来解析 HTML?你写了什么代码?你的问题基本上是“我做了一些事情但它不起作用,请告诉我为什么”。请提供一些细节
  • 很多网站都是动态的,加载了html之后(主要是JavaScript)会得到很多数据
  • 谢谢 Poul,我现在正在去睡觉的路上,但明天我会先试一试! Neil:我使用 StreamReader(C#) 来获取 url 的基本 HTML,然后我使用我自己的类对其进行排序和清理。到目前为止,它运行良好,但现在我想获得更多似乎不在基本 HTML 上的细节。知道可能是什么问题吗?
  • Pac0 好的,这听起来可能是问题所在,我早上第一件事就调查一下,谢谢!

标签: c# html web web-scraping


【解决方案1】:

正如其他人所说,您找不到详细信息的原因是因为它在页面加载后使用 ajax 获取数据。获取的 URL 是...

https://minetilbud.dk/api/rest/product/%7BE2193C06-1136-4ED7-9B66-693C3EB175FF%7D

返回...

{  
   "advert":{  
      "id":"{E2193C06-1136-4ED7-9B66-693C3EB175FF}",
      "title":"Peanuts",
      "description":"",
      "imageUrl":"https://img2minetilbud.azureedge.net/cloud/prod/MediaStorage/0/8/08B2BEFC5D7D42DEB3AA47CED86DFFD7/28_28_2_.jpg?crop=699,31,1109,814",
      "price":"6,-",
      "pricePercentage":"",
      "pricePerUnit":"",
      "priceVolume":"30,- per kg",
      "categoryMainTitle":"Snacknødder",
      "tradeLabels":[  

      ],
      "validFromFormatted":"5/10",
      "validToFormatted":"11/10",
      "validtext":"Gyldig t.o.m tor 11/10",
      "videoId":null,
      "videoType":null,
      "videoCoverImage":null,
      "fullAdvertUrl":"/tilbudsaviser/aldi/1/side/28",
      "duplicates":[  
         {  
            "id":"e2193c06-1136-4ed7-9b66-693c3eb175ff",
            "title":"Peanuts",
            "price":"6,-"
         }
      ],
      "relatedAdvertsUrl":"/Tilbudssoegning?qw=Snacknødder",
      "headCategoryTitle":"Dagligvarer",
      "categoryTitle":"Snacknødder",
      "brand":"Joe's",
      "categoryVariantTitles":"Peanuts",
      "keywords":"",
      "isMinimumPrice":false,
      "advertType":"Advert",
      "externalLinks":[  

      ]
   },
   "customer":{  
      "name":"ALDI",
      "headerImageUrl":"https://minetilbud2.azureedge.net/-/media/Images/Blurs/aldi.jpg",
      "headerTextColor":"#FFFFFF",
      "primaryColor":"#1f3480",
      "secondaryColor":"#111f60",
      "circleLogo":"https://minetilbud2.azureedge.net/-/media/Images/Runde-logoer/aldi.png",
      "catalogs":"/tilbudsaviser/aldi",
      "openingHours":"/tilbudsaviser/aldi/aabningstider",
      "linkText":"Køb varen online"
   },
   "dictionary":{  
      "adverts":"s tilbudsaviser",
      "advertsLinkV2":"Tilbudsaviser",
      "chooseAdvert":"Vælg",
      "openingHours":"Åbningstider",
      "shareOffer":"Del tilbud",
      "relatedOffers":"Lignende tilbud",
      "goToShop":"Gå til webshop",
      "readAdvert":"Læs tilbudsavisen",
      "videoText":"Se [[BRAND]]s video",
      "shareOnFacebook":"Del på Facebook",
      "tellAFriend":"Tip en ven",
      "savePercentage":"Spar",
      "from":"Fra"
   }
}

【讨论】:

  • 您好 Aydin,请问您使用什么软件或方法提取了该 json 格式的数据?
【解决方案2】:

看起来每个可点击产品都有一个产品 ID,可用于发出 api 请求以获取结构化 JSON 中的信息。该页面通过以如下内容开头的 url 将这些 id 与第二个脚本标记一起加载到 html 的顶部:

https://cdn.ipaper.io/iPaper/Papers/0996f096-0e32-4fd4-b62b-f40e59e490ea/Enrichments/v1/

如果你抓取了这个 url,那么你应该得到包含产品 id 的 json。然后,您可能希望存储这些产品 ID,然后以这种格式使用这些产品 ID 执行更多获取请求。

https://minetilbud.dk/api/rest/product/%7BD1E5927C-6EDD-4F3C-A925-1141077F3D96%7D

所以 https://minetilbud.dk/api/rest/product/%7{产品编号}%7D

您可以在 chrome 开发工具或 fiddler 中查看所有这些内容。

【讨论】:

    猜你喜欢
    • 2019-05-03
    • 1970-01-01
    • 2014-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-29
    相关资源
    最近更新 更多