我使用無頭模式提取了一個網頁,下面是輸出的相關內部HTML部分。
<div class="product__aside"> /span>
<div class="slider-pdp"/span>>
<div class="slider__clip"/span>>
< div class="slides slick-initialized slick-slider slick-dotted" role="toolbar">
< div aria-live="polite" class="slick-list draggable" style="padding。0px 24. 47%;">< div class="slick-track" role="listbox"/span> style="opacity: 1; width: 6010px; transform: translate3d(-1202px, 0px, 0px);">< div class="slide slick-slide slick-cloned" data-slick-index="- 2" aria-hidden="true" tabindex="-1" style="width: 601px;">
<div class=" slide__image">
<img src="https://tnuck.ips.photos/images/skus/P31637-PRODUCT_04--IMG_600-1812358633.
</div>/span>
</div>< div class="slide slick-slide slick-cloned" data-slick-index="- 1"/span> aria-hidden="true"/span> tabindex="-1" style="width: 601px;">
<div class=" slide__image">
<img src="https://tnuck.ips.photos/images/skus/P31637-PRODUCT_05--IMG_600-251567441.
</div>/span>
</div>< div class=" slide slick-slide slick-current slick-active slick- center" data-slick-index="0"/span> aria-hidden="false" tabindex="-1" role="option" aria-describedby="slick-slide00" style="width: 601px;">
<div class=" slide__image">
<img src="https://tnuck.ips.photos/images/skus/P31637-PRODUCT_LEAD--IMG_600--951538759.
</div>/span>
</div>< div class="slide slick-slide" data- slick-index="1" aria-hidden="true" tabindex="-1" role="option" aria-describedby="slick-slide01" style="width: 601px;">
<div class=" slide__image">
<img src="https://tnuck.ips.photos/images/skus/P31637-PRODUCT_01--IMG_600--1234110023.
</div>/span>
</div>< div class="slide slick-slide" data- slick-index="2" aria-hidden="true" tabindex="-1" role="option" aria-describedby="slick-slide02" style="width: 601px;">
<div class=" slide__image">
<img src="https://tnuck.ips.photos/images/skus/P31637-PRODUCT_02--IMG_600--150275930.
</div>/span>
</div>< div class="slide slick-slide" data- slick-index="3" aria-hidden="true" tabindex="-1" role="option" aria-describedby="slick-slide03" style="width: 601px;">
<div class=" slide__image">
<img src="https://tnuck.ips.photos/images/skus/P31637-PRODUCT_03--IMG_600--102741357.
</div>/span>
</div>< div class="slide slick-slide" data- slick-index="4" aria-hidden="true" tabindex="-1" role="option" aria-describedby="slick-slide04" style="width: 601px;">
<div class=" slide__image">
<img src="https://tnuck.ips.photos/images/skus/P31637-PRODUCT_04--IMG_600-1812358633.
</div>/span>
</div>< div class="slide slick-slide" data- slick-index="5" aria-hidden="true" tabindex="-1" role="option" aria-describedby="slick-slide05" style="width: 601px;">
<div class=" slide__image">
<img src="https://tnuck.ips.photos/images/skus/P31637-PRODUCT_05--IMG_600-251567441.
</div>/span>
</div>< div class="slide slick-slide slick-cloned slick-center" data-slick-index="6" aria-hidden="true" tabindex="-1" style="width: 601px;">
<div class=" slide__image">
<img src="https://tnuck.ips.photos/images/skus/P31637-PRODUCT_LEAD--IMG_600--951538759.
</div>/span>
</div>< div class=" slide slick-slide slick- cloned" data-slick-index="7" aria-hidden="true" tabindex="-1" style="width: 601px;">
<div class=" slide__image">
<img src="https://tnuck.ips.photos/images/skus/P31637-PRODUCT_01--IMG_600--1234110023.
</div>/span>
</div>< /div></div>
從這里我需要獲得src值,其中包含 "PRODUCT_LEAD "字串。為了做到這一點,我寫了以下代碼,如果我dd($imgs)它回傳長度為10。$pageBody是網頁的內部HTML。
$doc = new DOMDocument;
$doc-> preserveWhiteSpace = false;
$doc->strictErrorChecking = false。
$doc->recovery = true;
ini_set('user_agent', 'My-Application/2.5')。
libxml_use_internal_errors(true)。
$doc->loadHTML($pageBody)。
$xpath = new DOMXPath($doc)。
$imgs = $xpath->query('//*[@class="slide__image"] ')。
foreach($imgs as $img)
{
$imgurl = $img->getAttribute('src') 。
}
dd($imgurl); //this returns nothing。
uj5u.com熱心網友回復:
嘗試一下 $imgs = $xpath->query('//*[@class="slide__image"]/img/@src[contains(., "PRODUCT_LEAD")]');
方括號中的部分是 "謂詞",它決定了要選擇哪些元素。.指的是當前節點。
uj5u.com熱心網友回復:
試試這個代碼:
$imgurl = []。
for($x = 0; $x < $imgs-> length; $x ) {
$imgurl[] = $imgs->item($x)-> getAttribute('src') 。
}
uj5u.com熱心網友回復:
$doc = new DOMDocument;
$doc-> preserveWhiteSpace = false;
$doc->strictErrorChecking = false。
$doc->recovery = true;
ini_set('user_agent', 'My-Application/2.5')。
libxml_use_internal_errors(true)。
$doc->loadHTML($pageBody)。
$xpath = new DOMXPath($doc)。
$imgs = $xpath->query('//*[@class="slide__image"]/img/@src'/span>) 。
$imgurl=【】。
foreach($imgs as $img)
{
if(str_contains($img-> nodeValue,'PRODUCT_LEAD')
{
$leadImage = $img-> nodeValue。
}
}
代替getAttibute()我把代碼修改成這樣。而且這樣做很好。但我想知道我是否可以直接從query()中獲得這個url。
比如說//img[@src(contains())]
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/324232.html
標籤:
