【问题标题】:Web-scraping advice/suggestions网络抓取建议/建议
【发布时间】:2016-07-17 08:57:25
【问题描述】:

这是我第一次尝试抓取。我想使用一个带有搜索功能的网站。

当我进行搜索时,搜索详细信息未显示在网站 url 中。当我检查元素并查看“网络”选项卡时,请求 URL 保持不变 (method:post),但当我查看底部时,Form Data 部分,我点击查看源代码,并以 url 形式显示我的搜索详细信息。

我的问题是:

如果请求 url = http://somewebsite.com/search 表单数据源 = startDate=09.07.2016&endDate=10.07.2016

如何连接两者以提取数据以进行抓取?我是新手,所以如果我要解决这个问题,请告诉我。

谢谢!

【问题讨论】:

  • 我相信您会发现主要搜索引擎已经积极地让您尝试做的事情比过去几年更具挑战性。但是,它们确实提供 API 来允许搜索。这些通常需要您订阅并支付一定级别的 API 访问权限。如果您确实选择坚持尝试抓取,请准备好很快接受验证码的挑战。

标签: php python web-scraping


【解决方案1】:

刮擦是不好的做法,但在某些情况下,它是获得某些东西的唯一方法。
如果您正在抓取某些网站,请考虑保持温和,不要在一天内发出 100 万个请求。

基本上你需要使用 php curl 功能并传递帖子字段

<?php
$ch = curl_init();

curl_setopt($ch, CURLOPT_URL,"http://example.com/search");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query(array('postvar1'=>'value1')));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

$html = curl_exec ($ch);

curl_close ($ch);

【讨论】:

  • 感谢 AucT。我也在考虑用python做。看起来 cURL 是一个更好的选择。你怎么看?不,我不打算每天处理无数个请求,只是少数几个。 :)
  • 你可以用任何支持 curl 的语言来做。只需谷歌 curl 发布 %language%。
【解决方案2】:

道德

使用机器人获取网站内容可能对您和您正在抓取的网站有益。您可以使用这些数据来引用网站的内容,就像搜索引擎一样。有时您可能希望向用户提供原始网站不提供的服务。

但是,有时抓取被用于邪恶目的。窃取内容,使用他人的计算机资源,或更糟。

不清楚你的意图是什么。帮助你,可能是不道德的。我不是说它是,但它可能是。我不明白'AucT',说这是不好的做法,然后给出答案。这是怎么回事?

两个音符:

  1. 与大多数其他网页相比,生成搜索结果需要更多的资源。它们特别容易受到拒绝服务攻击。

  2. 我运行多个站点,我注意到大量流量是由机器人引起的。它实际上是在花我的钱。有些网站来自机器人的流量多于来自人的流量。它正在失控,我不得不投入相当多的时间来控制问题。不遵守带宽限制的机器人被我永久阻止。当然,我确实允许友好的机器人。

【讨论】:

  • 嘿,KIKO。感谢您的回答。不,我不打算窃取信息。我实际上打算按照您在回答开头提出的建议,“为用户提供原始网站不提供的服务。”我不想让任何人质疑他们的道德规范,因为我问了一个关于如何尝试抓取的问题。
  • 如果您的意图是好的,我假设您已经联系了您要抓取的网站并同意他们可以吗?任何内容提供商都会对此表示赞赏。如果您向他们提供您独特的“浏览器字符串”,他们还可以监控您的使用情况。这样做可以使您的服务更加可靠。
【解决方案3】:

你可以使用简单的html dom http://simplehtmldom.sourceforge.net/

<?php
include_once("simple_html_dom.php");
$request = array(
        'http' => array(
                'method' => 'POST',
                'content' => http_build_query(array(
                        'startDate' => '09.07.2016',
                        'endDate' => '10.07.2016'
                )),
        )
);
$url = "http://somewebsite.com/search";
$context = stream_context_create($request);
$html = file_get_html($url, false, $context);
?>

【讨论】:

    猜你喜欢
    • 2020-03-21
    • 1970-01-01
    • 2011-06-22
    • 2014-04-09
    • 2012-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-10
    相关资源
    最近更新 更多