Я пытаюсь скачать и сохранить изображение из Интернета с помощью модуля запросов Python - PullRequest
0 голосов
/ 09 апреля 2019

Я пытаюсь загрузить это изображение с помощью запросов по этому URL-адресу, но в строке 17 возникает определенная ошибка, которая не определяет, в чем проблема.

Я попытался добавить http: // с URL, чтобы сделать его понятным.

вот код, который я написал.

from selenium import webdriver
from bs4 import BeautifulSoup
import requests
import os
driver = webdriver.Chrome(executable_path= r'E:/Summer/FirstThings/Web scraping (bucky + pdf)/webscraping/tutorials-master/chromedriver.exe')
url = 'https://www.nba.com/players/jaylen/adams/1629121'
driver.get(url)
#print(driver.page_source)

soup = BeautifulSoup(driver.page_source , 'lxml')
div = soup.find('section' , class_='nba-player-header__item nba-player-header__headshot')
img = div.find('img')
print("")
m=('http://'+ img['src'])

f = open('jaylen_adams.jpg','w')
f.write(requests.get(m).content)
f.close()

driver.__exit__()

1 Ответ

1 голос
/ 09 апреля 2019

Пара ошибок, которые я обнаружил:

Во-первых, вам нужно исправить URL, поскольку он пытается получить доступ к http:////ak-static.cms.nba.com/wp-content/uploads/headshots/nba/latest/260x190/1629121.png, что является недействительным.Поэтому измените строку на:

m=('http:'+ img['src'])

Во-вторых, вам нужно записать в байтах.поэтому измените на:

f = open('C:/jaylen_adams.jpg','wb')

Код:

from selenium import webdriver
from bs4 import BeautifulSoup
import requests
import os
driver = webdriver.Chrome('C:/chromedriver_win32/chromedriver.exe')
url = 'https://www.nba.com/players/jaylen/adams/1629121'
driver.get(url)
#print(driver.page_source)

soup = BeautifulSoup(driver.page_source , 'lxml')
div = soup.find('section' , class_='nba-player-header__item nba-player-header__headshot')
img = div.find('img')
print("")
m=('http:'+ img['src'])  # <----- edit made here

f = open('C:/jaylen_adams.jpg','wb')   # <---- edit made here
f.write(requests.get(m).content)
f.close()

driver.__exit__()

ТАКЖЕ: Нет необходимости использовать селен, поскольку это может замедлитьпроцесс, если вы делаете несколько страниц.Вы можете упростить его, просто используя запросы, а также избавить от необходимости использовать .close() файл, если вы поместите его в оператор with, так как он автоматически закроется после завершения:

Более короткий код:

from bs4 import BeautifulSoup
import requests

url = 'https://www.nba.com/players/jaylen/adams/1629121'
response = requests.get(url)

soup = BeautifulSoup(response.text , 'lxml')
div = soup.find('section' , class_='nba-player-header__item nba-player-header__headshot')
img = div.find('img')
print("")
m=('http:'+ img['src'])

with open('C:/jaylen_adams.jpg','wb') as f:
    f.write(requests.get(m).content)
...