Я собираю данные о криптографах для исследовательского проекта, который я делаю для школы. У меня есть действительно простой класс, который идет на веб-страницу, входит в каждую из этих страниц href
ссылки и записывает их в файл.
Я на самом деле не получаю конкретную ошибку при запуске кода, но сейчас он просто пишет пустой файл. Кажется, моя проблема в том, что мои методы получения и установки не знают о моих личных переменных экземпляра, и, кроме того, мой объект ($ obj), кажется, не знает о моих методах получения и установки, поэтому я немного запутался.
Я использую JetBrains PHPStorm. Спасибо всем за помощь и поддержку
Изменить: я обновил код ниже, и он будет работать нормально. Для тех, кто заинтересован в его использовании — этот код соскребет все ссылки с веб-страницы и сохранит содержимое каждой ссылки внутри файла. Я, вероятно, собираюсь в конечном итоге изменить это, чтобы убрать весь html, чтобы я получал только необработанный текст, а затем JSON-кодировал вывод, чтобы его можно было легко проанализировать.
<?php
class Scraper
{
/*
=============================================
SET UP THE BASE DIRECTORY FOR SCRAPING,
AND OPEN FILES TO WRITE INFORMATION TO
==============================================
*/
private $basedir; //BASE DIRECTORY PATH FOR SCRAPING
private $outfile; //NAME OF FILE TO WRITE TO
/*
=============================================
SETTER FOR BASE DIRECTORY
==============================================
*/
public function setBaseDirectory($base)
{
$this->basedir = $base;
}
/*
=============================================
SETTER FOR OUTFILE
==============================================
*/
public function setOutfile($file)
{
$this->outfile = $file;
}
/*
=============================================
GETTER FOR OUTFILE
==============================================
*/
public function getOutfile()
{
return $this->outfile;
}
/*
=============================================
GETTER FOR BASE DIRECTORY
==============================================
*/
public function getBaseDirectory()
{
return $this->basedir;
}/*
=============================================
THIS FUNCTION TAKES THE HYPERLINKS OUT OF
A WEB PAGE AND RETURNS THEM IN AN ARRAY.
ITS SCOPE IS PRIVATE SINCE IT IS A HELPER
METHOD FOR GETDIRCONTENTS
=============================================
*/
private function grabLinks($contents)
{
$last_dir = array();
$URLs = array();
preg_match_all("|href=[\"'](.*?)[\"']|", $contents, $match);
foreach ($match as $key => $value)
foreach ($value as $key2 => $TheUrl)
$URLs[] = $TheUrl;
for ($i =0; $i < (count($URLs)/2);$i++)
{
$item = str_replace('href=','',(string)$URLs[$i]);
$item = str_replace('"','',$item);
array_push($last_dir, $item);
}
return $last_dir;
}/*
=============================================
THE GOAL OF THIS FUNCTION IS TO GET THE
CONTENTS OF EACH FORUM POST AND WRITE THEM
INTO A FILE. MAY EXPLORE CREATING AN
ASSOCIATIVE ARRAY AND JSON_ENCODING THEM
BASED ON NAME = POST NAME VALUE = FILE CONTENTS
=============================================
*/
public function getDirContents($dir)
{
$contents = file_get_contents($dir);
$linksArray = $this->grabLinks($contents);
for ($i = 0; $i < count($linksArray);$i++)
{
$contents = strip_tags(file_get_contents($dir.$linksArray[$i])); //GET CONTENTS OF FILE FROM LINK
fwrite($this->getOutfile(), $contents);
$debug = fopen("debugLog.txt", "w");
fwrite($debug, "debug contents: \n\n".$this->getOutfile().$this->getBaseDirectory()." $contents \n\n");
}
}
}
/*
=============================================
CREATE NEW INSTANCE OF CLASS AND CALL FUNCTION
TO GET CONTENTS OF DIRECTORY ITEMS
==============================================
*/
$obj = new Scraper();
$obj->setBaseDirectory("http://satoshi.nakamotoinstitute.org/posts/");
$obj->setOutfile(fopen("Satoshi_Forum_Posts.txt", "w"));
$obj->getDirContents($obj->getBaseDirectory());
echo $obj->getBaseDirectory();
echo $obj->getOutfile();
Хорошо, я смог найти источник проблемы, и я прошу прощения за трату времени тех людей, которые были достаточно любезны, чтобы прокомментировать выше. Оказывается, мой PHP-код был просто в порядке и работал после того, как я сделал 1 изменение.
Я только начал использовать JetBrains PHPStorm IDE и загружал этот файл класса в редактор со своего рабочего стола, а не из рабочего пространства JetBrains. Как только я включил небольшие синтаксические изменения, упомянутые Bulk и Jonathan Kuhn, я создал новый проект в JetBrains внутри рабочей области, которую я определил при настройке программы, и все предупреждающие сообщения исчезли (я до сих пор не до конца понимаю, почему они пошли далеко).
Я запустил свой код и дал желаемый результат. Я опубликую обновленный код в вопросе с обновлениями, предложенными в комментариях, чтобы любой, кому нужен такой скрипт, мог его использовать. Еще раз спасибо всем, кто хочет помочь!
Других решений пока нет …