选择css选择器使用美丽的汤

2024-10-04 11:28:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用html请求和BeautifulSoup开发一个webscraper(我是新手)。对于多个网页,例如(https://www.selfridges.com/GB/en/cat/hermes-rose-herms-silky-blush-6g_R03752945/?previewAttribute=32%20Rose%20Pommette),我试图获取图像链接,多个网页的图像链接总是相同的。HTML是:

<img class="c-image-gallery__img" src="//images.selfridges.com/is/image/selfridges/R03752945_32ROSEPOMMETTE_M?$PDP_M_ZOOM$" loading="lazy">

我尝试使用CSS选择器:

r = scraper.get(link)
soup = BeautifulSoup(r.content, 'lxml')
imagelink = soup.select('body > section > section.c-product-hero.--multiple-product-shot > div.c-product-hero__product-shots.c-image-gallery > div > picture:nth-child(1) > img')

返回None

或查找所有:

soup.find_all('img')

但具体链接不在列表中。我不确定这是为什么。任何帮助都将不胜感激


Tags: 图像imagedivcom网页img链接section
1条回答
网友
1楼 · 发布于 2024-10-04 11:28:46

您试图刮取的此页面使用Cloudflare,并且它具有某种保护功能,可以防止被刮取。服务器返回“403禁止”HTTP状态代码。一些网站使用大量javascript,如果没有支持javascript的浏览器,这些网站也很难获得。我建议您使用不同的技术,如Puppeteer

from bs4 import BeautifulSoup
import requests

link = "https://www.selfridges.com/GB/en/"
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36 OPR/75.0.3969.171"}

page = requests.get(link, headers=headers)
print(page.status_code)
print(page.text)

soup = BeautifulSoup(page.text, "lxml")
soup_imgs = soup.find_all("img")
for img in soup_imgs:
    print(img)

相关问题 更多 >