无法使用函数解析某些链接的标题
Can't parse the titles of some links using function
我编写了一个脚本来在使用从这个 url 填充的链接后解析每个页面的标题。更清楚一点:我下面的脚本应该解析登陆页面中的所有链接,然后重用这些链接以深入一层并从那里解析帖子的标题。
由于这是我第一次尝试在 php
中编写任何内容,所以我不知道哪里出错了。
这是我目前的尝试:
<?php
include("simple_html_dom.php");
$baseurl = "https://whosebug.com";
function get_links($baseurl)
{
$weburl = "https://whosebug.com/questions/tagged/web-scraping";
$html = file_get_html($weburl);
$processed_links = array();
foreach ($html->find(".summary h3 a") as $a) {
$links = $a->href . '<br>';
$processed_links[] = $baseurl . $links;
}
return implode("\n",$processed_links);
}
function reuse_links($processed_links){
$ihtml = file_get_html($processed_links);
foreach ($ihtml -> find("h1 a") as $item) {
echo $item->innertext;
}
}
$pro_links = get_links($baseurl);
reuse_links($pro_links);
?>
当我执行脚本时,它产生了以下错误:
Warning: file_get_contents( https: in C:\xampp\htdocs\differenttuts\simple_html_dom.php on line 75
Fatal error: Uncaught Error: Call to a member function find() on boolean in C:\xampp\htdocs\differenttuts\testfile.php:18 Stack trace: #0 C:\xampp\htdocs\differenttuts\testfile.php(23): reuse_links('https://stackov...') #1 {main} thrown in C:\xampp\htdocs\differenttuts\testfile.php on line 18
Once again: I expect my script to tarck the links from the landing page and parse the titles from it's target page.
我对simple_html_dom
不是很熟悉,但我会尽力回答这个问题。该库使用 file_get_contents
来执行 HTTP 请求,但在 PHP7 中 file_get_contents
在检索网络资源时不接受负偏移量(这是该库的默认设置)。
如果您使用的是 PHP 7,您会将偏移量设置为 0。
$html = file_get_html($url, false, null, 0);
在您的 get_links
函数中,您将链接连接到一个字符串。我认为最好是 return 一个数组,因为在下一个函数中您将需要这些链接用于新的 HTTP 请求。出于同样的原因,您不应该向链接添加中断标记,您可以在打印时中断。
function get_links($url)
{
$processed_links = array();
$base_url = implode("/", array_slice(explode("/", $url), 0, 3));
$html = file_get_html($url, false, null, 0);
foreach ($html->find(".summary h3 a") as $a) {
$link = $base_url . $a->href;
$processed_links[] = $link;
echo $link . "<br>\n";
}
return $processed_links ;
}
function reuse_links($processed_links)
{
foreach ($processed_links as $link) {
$ihtml = file_get_html($link, false, null, 0);
foreach ($ihtml -> find("h1 a") as $item) {
echo $item->innertext . "<br>\n";
}
}
}
$url = "https://whosebug.com/questions/tagged/web-scraping";
$pro_links = get_links($url);
reuse_links($pro_links);
我认为在get_links
中使用主url作为参数更有意义,我们可以从中得到基础url。我已经为基础 url 使用了数组函数,但您可以使用 parse_url
,这是合适的函数。
我编写了一个脚本来在使用从这个 url 填充的链接后解析每个页面的标题。更清楚一点:我下面的脚本应该解析登陆页面中的所有链接,然后重用这些链接以深入一层并从那里解析帖子的标题。
由于这是我第一次尝试在 php
中编写任何内容,所以我不知道哪里出错了。
这是我目前的尝试:
<?php
include("simple_html_dom.php");
$baseurl = "https://whosebug.com";
function get_links($baseurl)
{
$weburl = "https://whosebug.com/questions/tagged/web-scraping";
$html = file_get_html($weburl);
$processed_links = array();
foreach ($html->find(".summary h3 a") as $a) {
$links = $a->href . '<br>';
$processed_links[] = $baseurl . $links;
}
return implode("\n",$processed_links);
}
function reuse_links($processed_links){
$ihtml = file_get_html($processed_links);
foreach ($ihtml -> find("h1 a") as $item) {
echo $item->innertext;
}
}
$pro_links = get_links($baseurl);
reuse_links($pro_links);
?>
当我执行脚本时,它产生了以下错误:
Warning: file_get_contents( https: in C:\xampp\htdocs\differenttuts\simple_html_dom.php on line 75
Fatal error: Uncaught Error: Call to a member function find() on boolean in C:\xampp\htdocs\differenttuts\testfile.php:18 Stack trace: #0 C:\xampp\htdocs\differenttuts\testfile.php(23): reuse_links('https://stackov...') #1 {main} thrown in C:\xampp\htdocs\differenttuts\testfile.php on line 18
Once again: I expect my script to tarck the links from the landing page and parse the titles from it's target page.
我对simple_html_dom
不是很熟悉,但我会尽力回答这个问题。该库使用 file_get_contents
来执行 HTTP 请求,但在 PHP7 中 file_get_contents
在检索网络资源时不接受负偏移量(这是该库的默认设置)。
如果您使用的是 PHP 7,您会将偏移量设置为 0。
$html = file_get_html($url, false, null, 0);
在您的 get_links
函数中,您将链接连接到一个字符串。我认为最好是 return 一个数组,因为在下一个函数中您将需要这些链接用于新的 HTTP 请求。出于同样的原因,您不应该向链接添加中断标记,您可以在打印时中断。
function get_links($url)
{
$processed_links = array();
$base_url = implode("/", array_slice(explode("/", $url), 0, 3));
$html = file_get_html($url, false, null, 0);
foreach ($html->find(".summary h3 a") as $a) {
$link = $base_url . $a->href;
$processed_links[] = $link;
echo $link . "<br>\n";
}
return $processed_links ;
}
function reuse_links($processed_links)
{
foreach ($processed_links as $link) {
$ihtml = file_get_html($link, false, null, 0);
foreach ($ihtml -> find("h1 a") as $item) {
echo $item->innertext . "<br>\n";
}
}
}
$url = "https://whosebug.com/questions/tagged/web-scraping";
$pro_links = get_links($url);
reuse_links($pro_links);
我认为在get_links
中使用主url作为参数更有意义,我们可以从中得到基础url。我已经为基础 url 使用了数组函数,但您可以使用 parse_url
,这是合适的函数。