首页 > 解决方案 > 如何使用 BeautifulSoup 从 iframe 获取信息?

问题描述

我需要从电子商务链接的 iframe 中获取平均分数:https://produto.mercadolivre.com.br/MLB-1218117849-par-farol-polo-hatch-sedan-2003-2004-2005-2006-cromada-_JM#position=1&type=item&tracking_id=d57fba01-b043-49ca-9be5-7b026c275bd4

可以通过单击标题下方的星号来访问 iframe。

当我检查元素时,我发现:

<a rel="nofollow" class="iframe-modal " data-modal:url="/noindex/catalog/reviews/MLB1218117849?noIndex=true&amp;itemId=MLB1218117849&amp;modal=true&amp;modalWidth=840&amp;modalHeight=400&amp;access=stars" data-modal:dinamic="true" data-modal:width="840" data-modal:height="400" data-modal:frameless="1" data-modal:style="new">

在这种情况下,我需要'data-modal:url=',也就是说'/noindex/catalog/reviews/MLB1218117849?noIndex=true&amp;itemId=MLB1218117849&amp;modal=true&amp;modalWidth=840&amp;modalHeight=400&amp;access=stars',能够获得“4.7”平均星数信息。

我已经尝试了很多我在这里看到的选项,但我什至无法获得链接。我得到的最接近的可能是:

eval_url = (soup.
                 find('a', {'rel':'nofollow', 
                            'class':'iframe_modal ',
                            'data-modal:url':True}).get('data-modal:url').text)

尽管如此,它仍然无法正常工作。我做错了什么?

标签: pythonhtmlweb-scrapingiframebeautifulsoup

解决方案


要获取4.7平均星数信息,您可以选择带有 的元素class="review-summary-average"

例如:

import requests
from bs4 import BeautifulSoup


url = 'https://produto.mercadolivre.com.br/MLB-1218117849-par-farol-polo-hatch-sedan-2003-2004-2005-2006-cromada-_JM#position=1&type=item&tracking_id=d57fba01-b043-49ca-9be5-7b026c275bd4'
soup = BeautifulSoup(requests.get(url).content, 'html.parser')

print(soup.select_one('.review-summary-average').text)

印刷:

4.7

推荐阅读