получать контент с веб-сайта, даже если часть URL-адреса была изменена - PullRequest
0 голосов
/ 09 января 2020

Я извлек то, что мне нужно, из определенного c веб-сайта, но дело в том, что веб-сайт постоянно меняет свое местоположение контента, включая div. а также у них есть всплывающие окна, поэтому при поиске этого конкретного div, если появляется всплывающее добавление, то div не найден. Пример: я использовал

$client = new Client([
            'base_uri' => 'https://theexample.com/',
        ]);

, а затем:

$res = $client->request('get', 'category/lifestyle/horoscopes/' . $horoscope);

, но они продолжают изменять «категорию / стиль жизни / гороскопы /» в этой части. поэтому всякий раз, когда они меняются, я тоже должен изменить свой код. Есть ли способ получить гороскопы, даже если они установили его «категория / гороскоп» или «категория / что-то еще / гороскоп» ?? и способ избежать всплывающих окон.

вот дескриптор команды, который выполняется каждый день:

public function insertData($today)
    {
        $data = [];
        $count = 0;
        $todayFormat = date('Y') . '-' . strtoupper(date('F')) . '-' . date('j');
        $client = new Client([
            'base_uri' => 'https://theexample.com/',
        ]);
        $data['date'] = $today;
        $horoscopes = $this->getAllHoroscopes();
        foreach ($horoscopes as $horoscope) {
            try {
                $res = $client->request('get', 'category/horoscopes/' . $horoscope);
            } catch (RequestException $e) {
                echo Psr7\str($e->getRequest());
                if ($e->hasResponse()) {
                    echo Psr7\str($e->getResponse());
                }
            }
            $body = $res->getBody();
            $stringbody = (string) $body;
            $dom = HtmlDomParser::str_get_html($stringbody);
            $horoscopeDiv = $dom->find('.horoscopes', 0);
            $horoscopeDataDiv = $horoscopeDiv->find('.sign_detail', 0);
            $todayDateAll = $horoscopeDataDiv->children(1)->plaintext;
            $tempDate = explode(' ', $todayDateAll);
            $horoscopeEng = strtolower($tempDate[0]);
            if (ucwords($tempDate[2]) == (date('F')) && date('j') == $tempDate[3]) {
                $mainData = $horoscopeDataDiv->children(2)->plaintext;
                if ($mainData) {
                    $data[$horoscope] = html_entity_decode($mainData);
                }else{
                    $data[$horoscope] = "No data available for $data[$horoscope]";
                }
            }
        }
        $data = str_replace("’", "'", $data);
        $data = str_replace("“", '"', $data);
        $data = str_replace("”", '"', $data);
            /*$data = str_replace(
                array("’’", '"'), 
                array("’", "'"), 
                $data
            );*/
            EnglishHoroscope::create($data);
            $new_data['table_name'] = "english_horoscopes";
            $new_data['job_run_at'] = Carbon::now();
            $new_data['status'] = "data inserted for today";
            CronLogs::create($new_data);
            echo " succcessfully inserted englishhoroscope data";
        }
        public function getAllHoroscopes() {
            $horoscopes = ['aries', 'taurus', 'gemini', 'cancer', 'leo', 'virgo', 'libra', 'scorpio', 'sagittarius', 'capricorn', 'aquarius', 'pisces'];
            return $horoscopes;
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...