首先,我会说,由于我的代码注释是西班牙语,我会尝试用英语解释它们,即使代码非常明显且易于理解。如果我解释太明显的事情,不要感到侮辱:)
所以我试图从网站上获取所有img,但它似乎并不是真的想要。我读过一些类似的文章,但似乎都没有。
import requests
from bs4 import BeautifulSoup as bs
import os
您可以访问网站并亲自查看HTML。
# url de las imgs
url = 'https://dbz.space/cards/'
这里请求解析它的网页
# descargamos la pagina para scrapear
page = requests.get(url)
soup = bs(page.text, 'html.parser')
在这里,我搜索该类的所有图像
# localizamos todas las imgs con esa clase
image_tags = soup.findAll("img", {"class": "thumb on"})
在这里,我只看看文件夹imgs是否存在,如果它没有创建一个然后进入它内部
# si no existe imgs lo creamos
if not os.path.exists('imgs'):
os.makedirs('imgs')
# cambiamos de directorio
os.chdir('imgs')
用于命名所有图像的变量
# para el nombre de la imagen
x = 0
最后是保存过程
# guardando imagenes
for image in image_tags:
try:
url = image['src']
response = requests.get(url)
if response.status_code == 200:
with open('img-' + str(x) + '.jpg', 'wb') as f:
f.write(requests.get(url).content)
f.close()
x += 1
print('Nueva imagen en carpeta')
except:
pass
因此,网络上的imgs位于div标签内,并且他们有一个类"拇指在"它们还包含src(显然)链接,这是我想要访问的文件夹名为" imgs"
答案 0 :(得分:0)
如果你想要的只是图像文件本身的URL ......
> <img class="thumb on"
> src="https://dbz.s3.amazonaws.com/v2/global/character/thumb/card_1011720_thumb.png">
然后简单地......
yourBSobj.find("img", {"class": "thumb on"}).attrs['src']
我实际上会使用find_all(),因此您可以遍历图像循环,进行处理/保存等,然后查看结果。
答案 1 :(得分:0)
首先,正如@ cricket_007所说,img
标签确实是由JavaScript异步加载的。但是,不需要使用Selenium
。
经过检查,您可以看到每个img
代码都位于此代码中:
<div class="..." res="..." base="..." aim="" quantity="" release="1" imgur="x">
此标记在源代码中可用(即未由JavaScript加载)。在这里,我们可以获得x
值,该值是imgur URL的一部分。一个例子:
<div class="..." res="1010160" base="1010161" aim="" quantity="" release="1" imgur="yK0wNs3">
获取imgur
值后,您可以将URL设为:
'https://i.imgur.com/{}.png'.format(imgur)
由于网址为https://i.imgur.com/yK0wNs3.png。
完整代码:
r = requests.get('https://dbz.space/cards/')
#soup = BeautifulSoup(r.text, 'lxml')
soup = bs(r.text, 'html.parser')
if not os.path.exists('imgs'):
os.makedirs('imgs')
os.chdir('imgs')
i = 0
for item in soup.find_all('div', imgur=True):
imgur = item['imgur']
if imgur:
r = requests.get('https://i.imgur.com/{}.png'.format(imgur))
with open('img-{}.jpg'.format(i), 'wb') as f:
f.write(r.content)
i += 1
部分输出:
注意:我正在使用f.write(r.content)
而不是f.write(requests.get(url).content)
。无需再发送一个请求。
答案 2 :(得分:-1)
所以错误说出File "pilla.py", line 6, in <module> soup = BeautifulSoup(r.text, 'lxml') NameError: name 'BeautifulSoup' is not defined
通过更改soup
的变量BeautifulSoup
bs
和lxlm
的{{1}}来解决完整代码就在这里:
html.parser
非常感谢你的帮助。真的很赞美它:))