【问题标题】:PHP Simple HTML DOM Parser - blocked?PHP 简单 HTML DOM 解析器 - 被阻止?
【发布时间】:2021-10-19 21:33:45
【问题描述】:

感谢您对此进行调查。 虽然这可能是一个简单的问题,但我对页面处理太陌生了,无法理解为什么这个简单的代码会返回“false”。我在网上看到的大多数示例都使用基本 url,但我试图避开特定的产品页面。使用“http://www.google.com/”可以正常工作。会不会是我被屏蔽了?如果是这样,如何在 php 中解决它?在 python 中,一个会轮换 User-Auths 和代理。任何知识块将不胜感激。 这是带有特定链接的基本代码。

require_once($_SERVER['DOCUMENT_ROOT'].'/includes/simple_html_dom.php');

$url = 'https://www.lowes.com/pd/Frigidaire-Gallery-22-cu-ft-Counter-depth-Side-by-Side-Refrigerator-with-Ice-Maker-Fingerprint-Resistant-Black-Stainless-Steel/1000368269';
$html = file_get_html($url);

谢谢大家。

【问题讨论】:

  • 使用 file_get_contents 而不是 file_get_html 告诉我们 Lowes 正在返回 403 Forbidden,他们可能有一些防刮技术在起作用。

标签: php web-scraping


【解决方案1】:

Lowes 正在实施一些反抓取技术,因此您不能依赖 file_get_html。但是,您可以使用 PHP 的 curl 函数,然后在 Simple HTML DOM 中使用 str_get_html

<?php

require_once($_SERVER['DOCUMENT_ROOT'].'/includes/simple_html_dom.php');

$url = 'https://www.lowes.com/pd/Frigidaire-Gallery-22-cu-ft-Counter-depth-Side-by-Side-Refrigerator-with-Ice-Maker-Fingerprint-Resistant-Black-Stainless-Steel/1000368269';

// From https://gist.github.com/fijimunkii/952acac988f2d25bef7e0284bc63c406
$user_agents = [
    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36",
    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.107 Safari/537.36",
    "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:90.0) Gecko/20100101 Firefox/90.0",
    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.164 Safari/537.36",
    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36",
    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.107 Safari/537.36",
    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36",
    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.2 Safari/605.1.15",
    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.1 Safari/605.1.15",
    "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Firefox/91.0"
];

// Get random user agent
$user_agent = $user_agents[rand(0,count($user_agents)-1)];

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_USERAGENT, $user_agent);
$exec = curl_exec($ch);

$html = str_get_html($exec);

【讨论】:

  • 打错字了,意思是file_get_html
  • 谢谢,马尔昆。感谢您为我指明正确的方向:'curl'。我查看了 curl 和几个教程,以便我可以理解和使用它。我添加了一个随机 user_auth 并使用了我们订阅的代理。我收到了回复,所以你让我越过了这个障碍,我知道“访问被拒绝”。现在我的目标是克服它。对您的代码进行一次编辑 - 计数需要为 'count($user_agent)-1 谢谢,mulquin!
  • @napierjohn 不客气,感谢您的编辑,我已经更新了答案。如果可以,请确保将答案标记为已接受:) 祝你好运!
猜你喜欢
  • 2012-01-17
  • 1970-01-01
  • 1970-01-01
  • 2016-07-30
  • 2014-01-15
  • 2011-08-27
  • 2018-03-05
  • 2015-02-14
相关资源
最近更新 更多