【问题标题】:How to extract img src from web page via lxml in beautifulsoup using python?如何使用python在beautifulsoup中通过lxml从网页中提取img src?
【发布时间】:2019-06-10 01:05:23
【问题描述】:

我是 python 新手,我正在处理来自亚马逊的网页抓取项目,我在如何使用 BeautifulSoup 通过 lxml 从产品页面中提取产品 img src 时遇到问题

我尝试了以下代码来提取它,但它没有显示 img 的 url。

这是我的代码:

import requests
from bs4 import BeautifulSoup
import re

url = 'https://www.amazon.com/crocs-Unisex-Classic-Black-Women/dp/B0014C0LSY/ref=sr_1_2?_encoding=UTF8&qid=1560091629&s=fashion-womens-intl-ship&sr=1-2&th=1&psc=1'

r = requests.get(URL, headers={'User-Agent':'Mozilla/5.0'})
s = BeautifulSoup(r.text, "lxml")

img = s.find(class_="imgTagWrapper").img['src']
# I tried this code.

print(img)

我试过这段代码...但它显示如下:

数据:图像/ JPEG; BASE64,/ 9J / 4AAQSkZJRgABAQAAAQABAAD / 2wBDAAoHBwgHBgoICAgLCgoLDhgQDg0NDh0VFhEYIx8lJCIfIiEmKzcvJik0KSEiMEExNDk7Pj4 + JS5ESUM8SDc9Pjv / 2wBDAQoLCw4NDhwQEBw7KCIoOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozv / wAARCAG9AM4DASIAAhEBAxEB / 8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL / 8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4 + Tl5ufo6erx8vP09fb3 + PN6 / 8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL / 8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0t .... // P>

有什么帮助吗?

【问题讨论】:

  • 看来您得到的是实际的二进制 JPEG 数据,而不是图像的链接。此外,二进制数据已被编码为 base64。您可以检查源网页以查看它是否包含链接或图像本身。如果是后者,那么就没有链接了。祝你好运。

标签: python-3.x web-scraping beautifulsoup lxml


【解决方案1】:

您看到的是图像的 base64 编码。你用它做什么取决于你用图像 URL 做什么。

【讨论】:

  • 是的,这是 base64 编码图像,但我尝试使用 'html.parser' 它可以正常提取 img src 链接。
【解决方案2】:

您想从该页面抓取的图像在此键data-a-dynamic-image 的值中可用。那里有多个不同大小的图像。您现在需要做的就是创建一个条件语句来隔离包含395 的图像。

import json
import requests
from bs4 import BeautifulSoup

url = 'https://www.amazon.com/crocs-Unisex-Classic-Black-Women/dp/B0014C0LSY/ref=sr_1_2?_encoding=UTF8&qid=1560091629&s=fashion-womens-intl-ship&sr=1-2&th=1&psc=1'

r = requests.get(url, headers={'User-Agent':'Mozilla/5.0'})
s = BeautifulSoup(r.text, "lxml")
img = s.find(id="landingImage")['data-a-dynamic-image']
img = json.loads(img)
for k,v in img.items():
    if '395' in k:
        print(k)

输出:

https://images-na.ssl-images-amazon.com/images/I/71oNMAAC7sL._UX395_.jpg

在这种情况下,请像这样尝试并选择适合您需要的那个:

for k,v in img.items():
    print(k)

【讨论】:

  • 它的工作原理感谢 SIM,但是其他产品呢? ,我试图从另一个项目中提取数据,但它没有大小为 '395' 的 img 链接!.....这里是链接 amazon.com/Viishow-Printed-Dresses-Pockets-Wine/dp/B07PMHY51F/…
  • 我不明白这是如何工作的。我试过 json.loads() 行,我得到 BS4 object is not a string 错误。当我将结果转换为 str() 它实际上崩溃了 PyCharm (windows 10)
猜你喜欢
  • 2018-08-10
  • 2020-12-01
  • 2017-10-14
  • 1970-01-01
  • 2021-07-27
  • 2015-10-06
  • 2011-01-06
  • 2013-04-06
  • 2018-01-07
相关资源
最近更新 更多