【发布时间】:2021-07-14 12:38:17
【问题描述】:
我正在使用 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')
但具体链接不在列表中。我不确定这是为什么。任何帮助将不胜感激
【问题讨论】:
-
“我不确定这是为什么。” - 因为该 URL 返回的 HTML 不包含此元素。这很可能意味着,它稍后会通过客户端 JavaScript 加载并插入到文档中。这意味着,如果你想抓取这种内容,你不能仅仅通过请求页面的初始源代码来做到这一点,你宁愿需要一个所谓的无头浏览器。
-
谢谢你,我无法做到的原因是 cloudflare 在尝试通过 html-requests 访问页面时阻止了访问。有什么解决方法吗?
-
这与 Cloudflare 有什么关系?在您的浏览器中加载页面,查看实际的源代码(不是 DOM 检查器视图)- 您想要的元素不在其中。
标签: python html css web-scraping