【发布时间】:2021-06-02 10:13:59
【问题描述】:
我想从这些元素中提取标签src的内容
<div class="img-placeholder" style="padding-bottom:57.9%;">
<img data-srcset="abc.png" src="abc.png" data-placeholder="blurry" alt="Kijun Line" class=" lazyloaded" data-click-tracked="true" data-img-lightbox="true" data-owner="" data-caption="TradingView" data-expand="300" id="mntl-sc-block-image_1-0-5" data-tracking-container="true" srcset="abc.png 1541w">
</div>
我尝试了[tag.attrs['src'] for tag in soup.select('img')],但它返回错误KeyError: 'src'。您能否详细说明为什么它不起作用以及如何解决?
import requests
session = requests.Session()
from bs4 import BeautifulSoup
import os
l = 'https://www.investopedia.com/terms/k/kijun-line.asp'
headers = {'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:78.0) Gecko/20100101 Firefox/78.0'}
r = session.get(l, headers = headers)
soup = BeautifulSoup(r.content, 'html.parser')
temp4 = [tag.attrs['src'] for tag in soup.select('img')]
temp4
更新:我改成
[tag.attrs['src'] for tag in soup.select('div.img-placeholder img') if 'src' in tag.attrs]
但结果并不如预期,即
['data:image/gif;charset=utf-8;base64,R0lGODlhCwAGAPIAAHNzdWulg+Xy5f/l5f///3NzdXNzdXNzdSwAAAAACwAGAEIIGwAJCBxIsKDBgwIGBiAI4CABAAMGJAwQ0SHBgAA7',
'data:image/gif;charset=utf-8;base64,R0lGODlhCgAGAPIAABisoH+O0f2zcoGRz7a/4LfA4ejp7fDw8iwAAAAACgAGAEIIIQANHBhIcKCBAQULGhCYkMCBhQkHFhDAEMCBAAQhRnwYEAA7']
例如,满足条件的元素之一是
更新:我改为selenium。奇怪的是,我只能得到 2 个令人满意的元素中的一个。我的代码是
import requests
session = requests.Session()
from bs4 import BeautifulSoup
import os, time
from selenium import webdriver
driver = webdriver.Chrome('C:\\Users\\Akira\\Downloads\\Compressed\\chromedriver.exe')
l = 'https://www.investopedia.com/terms/k/kijun-line.asp'
driver.get(l)
time.sleep(10)
text = driver.page_source
soup = BeautifulSoup(text, 'html.parser')
temp4 = [tag.attrs['src'] for tag in soup.select('div.img-placeholder img') if 'src' in tag.attrs]
temp4
结果是
['https://www.investopedia.com/thmb/LbG-nFJad_8ednnDsr-fD7Uvcb8=/1541x893/filters:no_upscale():max_bytes(150000):strip_icc():format(webp)/Kijun-Sen-3b696ff097264a429b780a98afeb5cbe.png',
'data:image/gif;charset=utf-8;base64,R0lGODlhCgAGAPIAABisoH+O0f2zcoGRz7a/4LfA4ejp7fDw8iwAAAAACgAGAEIIIQANHBhIcKCBAQULGhCYkMCBhQkHFhDAEMCBAAQhRnwYEAA7']
【问题讨论】:
-
@RishabhKumar 我还要求澄清为什么我的代码不起作用。
-
似乎不是所有的
img标签都有src属性:[tag.attrs['src'] for tag in soup.select('img') if 'src' in tag.attrs] -
好吧,如果你真的不想要带有
src="data:"的图像,那么你可以过滤掉它们。如果这是收集所有这些图像标签的全部意义,您可以使用 python 对它们进行解码并获取保存在您机器上的实际图像文件。 -
忙,但您可以尝试复制浏览器在手动浏览时发送的所有请求标头和 cookie。我对请求的尝试返回两个带有
data:...的图像。我对 selenium 的尝试只返回一张带有data:...的图像。 -
您期待两个网址吗?它们是什么?
标签: python css python-3.x beautifulsoup css-selectors