我正在使用 html 请求和漂亮的汤来开发网络爬虫(我是新手)。对于多个网页,例如(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
或 find_all:
soup.find_all('img')
但具体链接不在列表中。我不确定这是为什么。任何帮助将不胜感激
答案 0 :(得分:0)
您尝试抓取的此页面使用 Cloudflare,它具有某种防止被抓取的保护。服务器返回“403 Forbidden”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)