#python #web-scraping #beautifulsoup #python-requests
#питон #соскабливание полотна #прекрасный суп #python-запросы #python #очистка веб-страниц #beautifulsoup
Вопрос:
Я пытаюсь загрузить некоторые изображения таким образом:
from bs4 import BeautifulSoup
import requests
url_ds3_part1 = 'https://darksouls3.wiki.fextralife.com'
url_ds3 = {
"daggers":"https://darksouls3.wiki.fextralife.com/Daggers",
"straight_swords":"https://darksouls3.wiki.fextralife.com/Straight Swords",
"great_swords":"https://darksouls3.wiki.fextralife.com/Greatswords",
"ultra_great_swords":"https://darksouls3.wiki.fextralife.com/Ultra Greatswords",
"curved_swords":"https://darksouls3.wiki.fextralife.com/Curved Swords",
"katanas":"https://darksouls3.wiki.fextralife.com/Katanas",
"curved_great_swords":"https://darksouls3.wiki.fextralife.com/Curved Greatswords",
"piercing_swords":"https://darksouls3.wiki.fextralife.com/Piercing Swords"
}
for url in url_ds3.values():
content = requests.get(url).content
soup = BeautifulSoup(content,'lxml')
image_tags = soup.findAll('img')
[urllib.request.urlretrieve(url_ds3_part1 str(image_tag.get('src')), str('images_swords') str(image_tag.get('src'))) for image_tag in image_tags if (('forum' in str(image_tag.get('src'))) == False)
amp; (('None' in str(image_tag.get('src'))) == False)
amp; (('avatar' in str(image_tag.get('src'))) == False)
amp; (('Damage' in str(image_tag.get('src'))) == False)
amp; (('Resist' in str(image_tag.get('src'))) == False)
amp; (('STR' in str(image_tag.get('src'))) == False)
amp; (('DEX' in str(image_tag.get('src'))) == False)
amp; (('INT' in str(image_tag.get('src'))) == False)
amp; (('FTH' in str(image_tag.get('src'))) == False)
amp; (('attack' in str(image_tag.get('src'))) == False)
amp; (('normal' in str(image_tag.get('src'))) == False)
]
Вы можете просто скопировать / вставить код, чтобы воспроизвести ошибку ошибки HHTP 404.
Я вроде как новичок в этом (первый раз, когда я делал очистку), но я подозреваю, что он борется с дубликатами или что-то в этом роде, вроде как борется с разложением этой проблемы?
Заранее спасибо за вашу помощь 🙂
РЕДАКТИРОВАТЬ: Забыл добавить url_ds3_part1 EDIT2: это должно дать вам представление об изображениях, которые я пытаюсь получить:
for url in url_ds3.values():
content = requests.get(url).content
soup = BeautifulSoup(content,'lxml')
image_tags = soup.findAll('img')
[print(url_ds3_part1 str(image_tag.get('src'))) for image_tag in image_tags if (('forum' in str(image_tag.get('src'))) == False)
amp; (('None' in str(image_tag.get('src'))) == False)
amp; (('avatar' in str(image_tag.get('src'))) == False)
amp; (('Damage' in str(image_tag.get('src'))) == False)
amp; (('Resist' in str(image_tag.get('src'))) == False)
amp; (('STR' in str(image_tag.get('src'))) == False)
amp; (('DEX' in str(image_tag.get('src'))) == False)
amp; (('INT' in str(image_tag.get('src'))) == False)
amp; (('FTH' in str(image_tag.get('src'))) == False)
amp; (('attack' in str(image_tag.get('src'))) == False)
amp; (('normal' in str(image_tag.get('src'))) == False)
]
РЕДАКТИРОВАТЬ 3 :
Временно обошла проблему с попыткой
for url in url_ds3.values():
content = requests.get(url).content
soup = BeautifulSoup(content,'lxml')
image_tags = soup.findAll('img')
try:
[urllib.request.urlretrieve(url_ds3_part1 str(image_tag.get('src')), str('images_swords') str(image_tag.get('src'))) for image_tag in image_tags if (('forum' in str(image_tag.get('src'))) == False)
amp; (('None' in str(image_tag.get('src'))) == False)
amp; (('avatar' in str(image_tag.get('src'))) == False)
amp; (('Damage' in str(image_tag.get('src'))) == False)
amp; (('Resist' in str(image_tag.get('src'))) == False)
amp; (('STR' in str(image_tag.get('src'))) == False)
amp; (('DEX' in str(image_tag.get('src'))) == False)
amp; (('INT' in str(image_tag.get('src'))) == False)
amp; (('FTH' in str(image_tag.get('src'))) == False)
amp; (('attack' in str(image_tag.get('src'))) == False)
amp; (('normal' in str(image_tag.get('src'))) == False)
]
except:
pass
Комментарии:
1. Какие изображения должен получить скрипт? Только значки, найденные в столбце
"Name amp; Icon"
?2. Извините, я оставил некоторую путаницу в коде, так как забыл определить свою переменную url_ds3_part1, теперь, если вы выполните все, да, вы должны получить значки, но в какой-то момент он перестанет восстанавливать все и выдаст сообщение об ошибке 404
Ответ №1:
При запуске вашего кода кажется, что некоторые URL-адреса являются абсолютными (они начинаются с https://
), а некоторые нет. Вам нужно проверить это:
import requests
import urllib.request
from bs4 import BeautifulSoup
url_ds3 = {
"daggers":"https://darksouls3.wiki.fextralife.com/Daggers",
"straight_swords":"https://darksouls3.wiki.fextralife.com/Straight Swords",
"great_swords":"https://darksouls3.wiki.fextralife.com/Greatswords",
"ultra_great_swords":"https://darksouls3.wiki.fextralife.com/Ultra Greatswords",
"curved_swords":"https://darksouls3.wiki.fextralife.com/Curved Swords",
"katanas":"https://darksouls3.wiki.fextralife.com/Katanas",
"curved_great_swords":"https://darksouls3.wiki.fextralife.com/Curved Greatswords",
"piercing_swords":"https://darksouls3.wiki.fextralife.com/Piercing Swords"
}
url_ds3_part1 = 'https://darksouls3.wiki.fextralife.com'
for url in url_ds3.values():
print(url)
content = requests.get(url).content
soup = BeautifulSoup(content,'lxml')
image_tags = soup.findAll('img')
for image_tag in image_tags:
if ( (('forum' in str(image_tag.get('src'))) == False)
amp; (('None' in str(image_tag.get('src'))) == False)
amp; (('avatar' in str(image_tag.get('src'))) == False)
amp; (('Damage' in str(image_tag.get('src'))) == False)
amp; (('Resist' in str(image_tag.get('src'))) == False)
amp; (('STR' in str(image_tag.get('src'))) == False)
amp; (('DEX' in str(image_tag.get('src'))) == False)
amp; (('INT' in str(image_tag.get('src'))) == False)
amp; (('FTH' in str(image_tag.get('src'))) == False)
amp; (('attack' in str(image_tag.get('src'))) == False)
amp; (('normal' in str(image_tag.get('src'))) == False) ):
if image_tag.get('src').startswith('http'):
u = image_tag['src']
else:
u = url_ds3_part1 image_tag['src']
urllib.request.urlretrieve(u, 'images_swords' image_tag['src'].replace(url_ds3_part1, ''))