【发布时间】:2016-07-15 14:17:17
【问题描述】:
我正在尝试构建一个基本的网络爬虫。它几乎适用于任何网站,但有些网站我无法废弃,这是为什么呢?这是我在一个有效的网站(这个网站)上的代码:
<!doctype html>
<html lang="en-US">
<body>
<?php
$url ='http://stackoverflow.com/';
$output = file_get_contents($url);
echo $output;
?>
</body>
</html>
当在我自己的本地主机上运行时,它会将 stackoverflow.com 的内容输出到我的站点中。这是一个不适合的网站:
<!doctype html>
<html lang="en-US">
<body>
<?php
$url ='https://www.galottery.com/en-us/home.html';
$output = file_get_contents($url);
echo $output;
?>
</body>
</html>
我没有加载网站,而是收到此错误:
警告:file_get_contents(https://www.galottery.com/en-us/home.html):打开流失败:HTTP 请求失败! HTTP/1.1 403 Forbidden in C:\xampp\htdocs\projects\QD\webScraping\index.php 第 6 行
为什么这对某些网站有效,而对其他网站无效?我认为这可能是因为其中一个是 HTTPS 站点,但我已经为 https://google.com 之类的其他站点尝试了此代码,并且效果很好。
我正在使用 XAMMP 运行本地 PHP。
【问题讨论】:
-
他们很可能在他们的服务器上安装了一些东西来阻止人们抓取他们的网站
-
您是否尝试过从浏览器访问该网页?如果您无法访问它,那么您已被该站点阻止
-
远程站点正在根据我们不可能知道的某些策略阻止请求。也许是由于缺少用户代理或类似的。顺便说一句,如果您要在公共网站上使用这种策略,请务必获得相关权限,否则您可能会陷入法律困境
-
可以使用与此帮助不同的方法吗?
-
403 Forbidden 说出了它所说的 :) 该网站不希望您的抓取工具在那里。例如,它可以是 htaccess 保护。有时您可以通过使用 useragent 来通过这种保护(例如,请参见此处:stackoverflow.com/a/2107792/6347483)
标签: php web-scraping