Регулярное выражение для извлечения содержимого внутри тега script в php - PullRequest
0 голосов
/ 09 февраля 2020

Я пытался извлечь URL загрузки с веб-страницы. код, который пробовал ниже

function getbinaryurl ($url)
   {

    $curl = curl_init($url);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($curl, CURLOPT_FRESH_CONNECT, true);
    $value1 = curl_exec($curl);
    curl_close($curl);        
    $start = preg_quote('<script type="text/x-component">', '/');
    $end = preg_quote('</script>', '/');
    $rx = preg_match("/$start(.*?)$end/", $value1, $matches);
    var_dump($matches);
}
 $url = "https://www.sourcetreeapp.com/download-archives";
 getbinaryurl($url);

, таким образом, я получаю информацию тегов, а не содержимое внутри тега сценария. как получить информацию внутри.

ожидаемый результат: https://product-downloads.atlassian.com/software/sourcetree/ga/Sourcetree_4.0.1_234.zip, https://product-downloads.atlassian.com/software/sourcetree/windows/ga/SourceTreeSetup-3.3.6.exe, https://product-downloads.atlassian.com/software/sourcetree/windows/ga/SourcetreeEnterpriseSetup_3.3.6.msi

Я очень новый в написании этих регулярных выражений. Может ли помочь мне, пожалуйста.

1 Ответ

2 голосов
/ 09 февраля 2020

Вместо использования регулярных выражений, использование DOMDocument и XPath позволяет вам лучше контролировать выбранные элементы.

Хотя XPath может быть сложным (так же, как регулярное выражение), для некоторых это выглядит более интуитивно понятным. Код использует //script[@type="text/x-component"][contains(text(), "macURL")], который разбит на

  • // script = любой узел скрипта
  • [@ type = "text / x-component"] =, который имеет атрибут с именем введите со спецификацией c значение
  • [содержит (текст (), "macURL")] = чей текст содержит строку macURL

Метод query() возвращает список спичек, так что я oop над ними. Содержимое равно JSON, поэтому расшифруйте его и выведите значения ...

function getbinaryurl ($url)
{

    $curl = curl_init($url);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($curl, CURLOPT_FRESH_CONNECT, true);
    $value1 = curl_exec($curl);
    curl_close($curl);

    $doc = new DOMDocument();
    libxml_use_internal_errors(true);
    $doc->loadHTML($value1);
    libxml_use_internal_errors(false);

    $xp = new DOMXPath($doc);

    $srcs = $xp->query('//script[@type="text/x-component"][contains(text(), "macURL")]');
    foreach ( $srcs as $src )   {
        $content = json_decode( $src->textContent, true);
        echo $content['params']['macURL'] . PHP_EOL;
        echo $content['params']['windowsURL'] . PHP_EOL;
        echo $content['params']['enterpriseURL'] . PHP_EOL;
    }
}
$url = "https://www.sourcetreeapp.com/download-archives";
getbinaryurl($url);

, которые выводят

https://product-downloads.atlassian.com/software/sourcetree/ga/Sourcetree_4.0.1_234.zip
https://product-downloads.atlassian.com/software/sourcetree/windows/ga/SourceTreeSetup-3.3.8.exe
https://product-downloads.atlassian.com/software/sourcetree/windows/ga/SourcetreeEnterpriseSetup_3.3.8.msi
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...