使用通配符和PHP进行爬取

6

我很难想象和构思一种方法来抓取这个页面:http://www.morewords.com/ends-with/aw,并将其中的单词以php数组形式列出。给定一个URL,我希望获取内容,然后生成php数组,其中包含所有单词,这些单词在源代码中看起来像

<a href="/word/word1/">word1</a><br />
<a href="/word/word2/">word2</a><br />
<a href="/word/word3/">word3</a><br />
<a href="/word/word4/">word4</a><br />

我考虑了几种方法来实现这个目标,希望你能帮我决定最有效的方法。同时,我也希望能得到一些关于如何实现它的建议或示例。我知道这不是非常复杂,但我需要你这些高级黑客的帮助。

  • 使用某种jquery $.each() 循环遍历并将它们转换为JS数组,然后转录(可能会很费力)
  • 使用某种curl (对curl没有太多经验)
  • 使用一些复杂的查找和替换正则表达式。
1个回答

3

您将其标记为PHP,因此这里是一个PHP解决方案 :)

$dom = new DOMDocument;

$dom->loadHTMLFile('http://www.morewords.com/ends-with/aw');

$anchors = $dom->getElementsByTagName('a');

$words = array();

foreach($anchors as $anchor) {
    if ($anchor->hasAttribute('href') AND preg_match('~/word/\w+/~', $anchor->getAttribute('href'))) {
        $words[] = $anchor->nodeValue;
    }
}

CodePad

如果在php.ini中禁用了allow_url_fopen,您可以使用cURL获取HTML。

$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, 'http://www.morewords.com/ends-with/aw'); 
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$html = curl_exec($curl);    
curl_close($curl);   

@willum 要打开这样的URL,你可能需要在php.ini中启用allow_url_fopen。如果它被禁用了,你可以使用cURL库将HTML传递给DOMDocument - alex
@willum 上面的例子PHP。如果你指的是cURL库,PHP有直接从PHP与其交互的函数。 - alex
你能展示一下如何使用curl进行路由吗?我的主机PHPFog不允许更改php.ini文件。 - willium
是的,我知道这是Alex :) 我只是在回应“你将它标记为PHP,所以这里是一个PHP解决方案 :)” - willium
@willum 这份文档包含了你所需的一切。要查看你是否开启了allow_url_fopen,请检查phpinfo() - alex
显示剩余14条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接