【问题标题】:scraping data from search query with PHP使用 PHP 从搜索查询中抓取数据
【发布时间】:2011-02-03 02:12:21
【问题描述】:

我正在使用 PHP,也是一个完全的菜鸟。

所以我有这个 URL,它接受查询并返回一个带有一些匹配项的数据文件。

说 www.example.com/search?q=$query 其中 $query 是搜索词。

但是,当您在浏览器中访问 URL 时,它会下载一个包含信息的文本文件。

我想遍历整个字母表以及最多 10 个字母的每个字母组合,并从所有返回的文件中提取数据并将其存储在数据库中。

我不确定如何从 PHP 脚本打开每个 URL。有没有比下载每个文件并提取信息然后删除文件更好的方法?

我下面的内容根本不起作用。

$alphabet = "abcdefghijklmnopqrstuvwxyz";
for ($i=0; $i<=25; $i++){
    $query = $alphabet[$i];
    $url = "www.example.com/search?q=$query";
    $html = fopen($url);
    $stringify = (string)$html;
    echo $stringify;
}

【问题讨论】:

  • 您的脚本是否与您的文件在同一台服务器上运行?
  • 我知道您并没有对脚本做任何认真的事情,但请确保您获取任何像这样的输入数据并擦洗它。如果数据是恶意制作的,它很容易对您的数据库造成不良影响。 Stack Overflow 上有很多相关的问题和答案。
  • 无论如何,如果此脚本在同一台服务器上运行,更简单的方法是使用 glob() 并获取所有 [a-zA-Z]{1,10}.txt (或任何文件扩展名)文件,然后遍历它们。
  • 您知道从 1 到 10 的每个字母组合都会产生约 146 万亿的结果,对吧?你可能需要重新考虑你需要做什么——无论你做什么都可能行不通。
  • @Phil Brown:你可以,但你会得到类似“Resource id #1”的值:P,但他也忽略了向 fopen 添加第二个参数()

标签: php autocomplete scrape


【解决方案1】:

您不能只从 URL 打开文件。您需要使用 HTTP 客户端库才能获取文件。这个链接可能会派上用场:HTTP Client Library for PHP


编辑:根据 alex 的评论,您可能需要在您的 php.ini 文件中检查 allow_url_fopen

【讨论】:

  • 如果allow_url_fopenphp.ini 中打开,则可以。
【解决方案2】:
$html = fopen($url);

这行不通。 fopen 返回文件句柄,而不是文件。您必须在该文件句柄上 fread() 才能实际读取数据。

你想要的是file_get_contents(),最少。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-21
    • 2016-06-18
    • 2017-04-18
    • 1970-01-01
    相关资源
    最近更新 更多