Я написал скрипт на php для очистки title
продукта, расположенного в верхнем правом углу веб-страницы.title
отображается как Gucci
.
, когда я выполняю свой скрипт ниже, он выдает ошибку Notice: Trying to get property 'plaintext' of non-object in C:\xampp\htdocs\runcode\testfile.php on line 16
.
Как я могу получить только имя Gucci
с этой веб-страницы?
Ссылка на URL
Я уже написал:
<?php
include "simple_html_dom.php";
$link = "https://www.farfetch.com//bd/shopping/men/gucci-rhyton-web-print-leather-sneaker-item-12964878.aspx";
function get_content($url)
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('User-Agent: Mozilla/5.0',));
curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$htmlContent = curl_exec($ch);
curl_close($ch);
$dom = new simple_html_dom();
$dom->load($htmlContent);
$itemTitle = $dom->find('#bannerComponents-Container [itemprop="name"]', 0)->plaintext;
echo "{$itemTitle}";
}
get_content($link);
?>
Кстати, селектор, который я использовал в скрипте, безупречен.
Чтобы устранить путаницу, я скопировал кусок html-элементов из источника страницы , который не генерирует ни динамически, ни зашифрованный javascript, поэтому я не нахожу причин для того, чтобы curl не смогчтобы справиться с этим:
<div class="cdb2b6" id="bannerComponents-Container">
<p class="_41db0e _527bd9 eda00d" data-tstid="merchandiseTag">New Season</p>
<div class="_1c3e57">
<h1 class="_61cb2e" itemProp="brand" itemscope="" itemType="http://schema.org/Brand">
<a href="/bd/shopping/men/gucci/items.aspx" class="fd9e8e e484bf _4a941d f140b0" data-trk="pp_infobrd" data-tstid="cardInfo-title" itemProp="url" aria-label="Gucci">
<span itemProp="name">Gucci</span>
</a>
</h1>
</div>
</div>
Post script: Очень жалко, что мне пришлось показать реальный пример из другого языка, чтобы убедиться, что имя Gucci
не генерируется динамически какнесколько комментариев и ответ уже указали, что
Следующий скрипт написан на python (с использованием модуля requests
, который не может обрабатывать динамический контент):
import requests
from bs4 import BeautifulSoup
url = "https://www.farfetch.com//bd/shopping/men/gucci-rhyton-web-print-leather-sneaker-item-12964878.aspx"
with requests.Session() as s:
s.headers["User-Agent"] = "Mozilla/5.0"
res = s.get(url)
soup = BeautifulSoup(res.text,"lxml")
item = soup.select_one('#bannerComponents-Container [itemprop="name"]').text
print(item)
Вывод:
Gucci
Теперь ясно, что контент, который я ищу
Пожалуйста, проверьте изображение ниже, чтобы распознать title
, который я уже отметил карандашом.