BeautifulSoup img sr c получает base64 вместо фактической ссылки - PullRequest
0 голосов
/ 06 мая 2020

Я новичок в веб-скрейпинге с использованием bs4 и хочу получить изображение белка из банка данных белка (PDB):

https://www.rcsb.org/structure/1A69

Когда я проверяю HTML с помощью Chrome Inspector, я вижу, что изображение получено через http-ссылку, по которой я могу легко go сохранить изображение.

<img class="img-responsive center-block mainImage" 
     src="https://cdn.rcsb.org/images/rutgers/a6/1a69/1a69.pdb1-500.jpg">

Однако, когда Я запускаю свой скрипт для извлечения sr c, я получаю его только как base64.

data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs=

Я что-то не так делаю? Что творится? Есть ли способ вернуть http-ссылку из base64?

Мой код:

from bs4 import BeautifulSoup as bs
from urllib.request import urlopen

url = "https://www.rcsb.org/structure/1A69"
resp = urlopen(url)
page = bs(resp,"html.parser")

for img in page.findAll('img',{'class':'img-responsive'}):
    src = img['src']
    print(src)

Ответы [ 2 ]

0 голосов
/ 06 мая 2020

Если вы хотите увидеть изображения без base64, попробуйте следующее:

import requests as re
from bs4 import BeautifulSoup as bs
from urllib.request import urlopen
url = "https://www.rcsb.org/structure/1A69"
resp = urlopen(url)
soup = bs(resp, 'html.parser')
images = []

for img in soup.findAll('img'):
    images.append(img.get('src'))

for i in images:
    i = 'http:' + i
    try:
        response = re.get(i)
        if response.status_code == 200:
            print(i)
    except:
        continue

Вывод:

http://files.rcsb.org/pub/pdb/validation_reports/a6/1a69/1a69_multipercentile_validation.png
http://cdn.rcsb.org/rcsb-pdb/explorer/SSPv2/images/MendeleyIcon.png
http://cdn.rcsb.org/rcsb-pdb/explorer/SSPv2/images/EndNoteIcon.png
http://cdn.rcsb.org/images/ccd/unlabeled/F/FMB.svg
http://cdn.rcsb.org/images/ccd/unlabeled/S/SO4.svg
http://files.rcsb.org/pub/pdb/validation_reports/a6/1a69/1a69_multipercentile_validation.png
0 голосов
/ 06 мая 2020

URL-адреса изображений динамически составляются Javascript, но вы можете имитировать создание с помощью этого Python скрипта:

import requests
from bs4 import BeautifulSoup

url = 'https://www.rcsb.org/structure/1A69'
soup = BeautifulSoup(requests.get(url).content, 'html.parser')
pdb_id = url.split('/')[-1].lower()
images_location = "https://cdn.rcsb.org/images/rutgers/"
num_items = len( soup.select('#carousel-structuregallery .item') )
pdb_hash = pdb_id[1:3]

# print image urls to screen:

for i in range(num_items):
    # 0 = Asymmetric; 1+ = Biological Assembly
    if i == 0:
        img_url = images_location + pdb_hash + '/' + pdb_id + '/' + pdb_id + '.pdb-500.jpg'
    else:
        img_url = images_location + pdb_hash + '/' + pdb_id + '/' + pdb_id + '.pdb' + str(i) + '-500.jpg'
    print(img_url)

Печать:

https://cdn.rcsb.org/images/rutgers/a6/1a69/1a69.pdb-500.jpg
https://cdn.rcsb.org/images/rutgers/a6/1a69/1a69.pdb1-500.jpg
...