#python #selenium-webdriver #web-scraping #beautifulsoup #python-requests
#python #selenium-webdriver #очистка веб-страниц #beautifulsoup #python-запросы
Вопрос:
Я пытаюсь загрузить это изображение с помощью запросов по этому URL, но в строке 17 возникает определенная ошибка idk, которая не определяет, в чем проблема.
Я попытался добавить http: // с URL, чтобы сделать его понятным 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:
Я обнаружил пару ошибок:
во-первых, вам нужно исправить 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__()
ТАКЖЕ: нет необходимости использовать selenium, так как это может замедлить процесс, если вы выполняете несколько страниц. Вы могли бы упростить его, просто используя запросы, а также устранить необходимость использования .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)