Я написал скрипт на php для удаления title , видимого как shamboo для выпадения волос с веб-страницы.Когда я выполняю свой скрипт ниже, я получаю следующую ошибку:
Примечание: Попытка получить свойство 'nodeValue' необъекта в C: \ xampp \ htdocs \ runcode \ testfile.php на линии16.
Ссылка на этот сайт
Скрипт, с которым я пробовал:
<?php
function get_content($url){
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_exec($ch);
$htmlContent = curl_exec($ch);
curl_close($ch);
return $htmlContent;
}
$link = "https://www.purplle.com/search?q=hair%20fall%20shamboo";
$xml = get_content($link);
$dom = @DOMDocument::loadHTML($xml);
$xpath = new DOMXPath($dom);
$title = $xpath->query('//h1[@class="br-hdng"]/span')->item(0)->nodeValue;
echo "{$title}";
?>
Мой ожидаемый результат:
hair fall shamboo
Хотя xpath
, который я использовал в моем вышеупомянутом скрипте, кажется правильным, я вставил сюда соответствующую часть html-элементов, внутри которой можно найти title
:
<h1 _ngcontent-c0="" class="br-hdng"><span _ngcontent-c0="" class="pr dib">hair fall shamboo<!----></span></h1>
PostScript: title
, который я хочу проанализировать, загружается динамически.Поскольку я новичок в php, я не понимаю, является ли способ, который я пробовал, точным.Если не то, что я должен делать тогда?
Ниже приведены сценарии, которые я создал с использованием двух разных языков и обнаружил, что они работают как по волшебству.
Я добился успеха, используя javascript
:
const puppeteer = require('puppeteer');
function run () {
return new Promise(async (resolve, reject) => {
try {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto("https://www.purplle.com/search?q=hair%20fall%20shamboo");
let urls = await page.evaluate(() => {
let items = document.querySelector('h1.br-hdng span');
return items.innerText;;
})
browser.close();
return resolve(urls);
} catch (e) {
return reject(e);
}
})
}
run().then(console.log).catch(console.error);
Снова, я добился успеха, используя python
:
import requests_html
with requests_html.HTMLSession() as session:
r = session.get('https://www.purplle.com/search?q=hair%20fall%20shamboo')
r.html.render()
item = r.html.find("h1.br-hdng span",first=True).text
print(item)
Что не так с php
тогда?