我正在尝试从刮擦的图像中检索URL,但是页面使用的是svg-xml数据。在chrome inspector中,URL是可见的,但在源代码中却不可见。
他们使用:
<img class="main-image" data-product-uid="156597" src="data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20version%3D%221.1%22%20width%3D%22320%22%20height%3D%22320%22%2F%3E" srcset="data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20version%3D%221.1%22%20width%3D%22320%22%20height%3D%22320%22%2F%3E" sizes=" (min-width: 1280px) 387px, (min-width: 640px) calc(100vw - 320px) * 50%, 50vw " alt="" data-wa-src="https://www.theirurl.de/tag-heuer/formula-1/quartz-chronograph-43mm-caz1010.ba0842__eb96638ada.png" data-wa-srcset="https://www.theirurl.de/tag-heuer/formula-1/quartz-chronograph-43mm-caz1010.ba0842__7293fe2804.png 640w, https://www.theirurl.de/tag-heuer/formula-1/quartz-chronograph-43mm-caz1010.ba0842__eb96638ada.png 320w">
有趣的是,data-wa-src映像不是同一张。
我正在尝试检索手表的主要图像:Example page
答案 0 :(得分:1)
当您请求诸如https://www.brogle.de/tag-heuer/formula-1/f1-auto-smallsecond-43/#156867之类的产品主页时,浏览器会向https://www.brogle.de/ajaxCached/ajax-product-details/paction/showProductAjax/puid/156867/再次请求产品描述
请注意,产品ID(156867
)是产品描述URL的唯一动态部分,因此,如果您知道产品主页URL,则可以提取产品ID并发送描述请求:
请求+ lxml.html示例:
import requests
from lxml import html
main_url = "https://www.brogle.de/tag-heuer/formula-1/f1-auto-smallsecond-43/#156867"
api_url = "https://www.brogle.de/ajaxCached/ajax-product-details/paction/showProductAjax/puid/"
product_id = main_url.rsplit("#")[-1]
product_description = requests.get(api_url + product_id).text
html_source = html.fromstring(product_description)
image_src = html_source.xpath('//img[@itemprop="image"]/@src')
print(image_src[0])
# 'https://www.brogle.de/tag-heuer/formula-1/automatic-small-second-43mm-waz2014.ba0842__f4e2ac9b28.png'
P.S。抱歉,我没有使用Scrapy,但是我敢肯定上述代码可以轻松转换为Scrapy代码