У меня есть веб-сайт, на котором я хотел бы получить все изображения с веб-сайта.
Сайт носит динамичный характер, я попробовал использовать расширение Agenty Chrome от Google и следовал инструкциям:
- Я выбираю одно изображение, которое я хочу извлечь, используя селектор CSS, это заставит расширение автоматически выбирать те же другие изображения.
- Просматривал кнопку Показать и выбирал ATTR (атрибут).
- Изменен src в качестве поля ATTR.
- Дали опцию имени поля имени.
- Сохранил его и запустил с использованием платформы агента / API.
Это должно дать мне результат, но это не так, он возвращает пустой вывод.
Есть ли лучший вариант? Будет ли BS4 лучшим вариантом для этого? Любая помощь приветствуется.
4 ответа
Я предполагаю, что вы хотите скачать все изображения на сайте. На самом деле очень легко сделать это эффективно, используя красивый суп 4 (BS4).
#code to find all images in a given webpage
from bs4 import BeautifulSoup
import urllib.request
import requests
import shutil
url=('https://www.mcmaster.com/')
html_page = urllib.request.urlopen(url)
soup = BeautifulSoup(html_page, features="lxml")
for img in soup.findAll('img'):
assa=(img.get('src'))
new_image=(url+assa)
Вы можете также загрузить изображение с этим прикрепленным до конца:
response = requests.get(my_url, stream=True)
with open('Mypic.bmp', 'wb') as file:
shutil.copyfileobj(response.raw, file)
Все в двух строках:
from bs4 import BeautifulSoup; import urllib.request; from urllib.request import urlretrieve
for img in (BeautifulSoup((urllib.request.urlopen("https://apod.nasa.gov/apod/astropix.html")), features="lxml")).findAll('img'): assa=(img.get('src')); urlretrieve(("https://apod.nasa.gov/apod/"+assa), "Mypic.bmp")
Новое изображение должно находиться в том же каталоге, что и файл python, но его можно переместить с помощью:
os.rename()
В случае веб-сайта McMaster изображения связаны по-разному, поэтому вышеуказанные методы не будут работать. Следующий код должен получить большинство изображений на сайте:
from bs4 import BeautifulSoup
from urllib.request import Request, urlopen
import re
import urllib.request
import shutil
import requests
req = Request("https://www.mcmaster.com/")
html_page = urlopen(req)
soup = BeautifulSoup(html_page, "lxml")
links = []
for link in soup.findAll('link'):
links.append(link.get('href'))
print(links)
ОБНОВЛЕНИЕ: я нашел из некоторого поста github приведенный ниже код, который НАМНОГО более точен:
import requests
import re
image_link_home=("https://images1.mcmaster.com/init/gfx/home/.*[0-9]")
html_page = requests.get(('https://www.mcmaster.com/'),headers={'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.108 Safari/537.36'}).text
for item in re.findall(image_link_home,html_page):
if str(item).startswith('http') and len(item) < 150:
print(item.strip())
else:
for elements in item.split('background-image:url('):
for item in re.findall(image_link_home,elements):
print((str(item).split('")')[0]).strip())
Надеюсь это поможет!
Вы можете использовать инструмент для очистки веб-страниц Agenty.
- Настройте свой скребок, используя расширение Chrome, чтобы извлечь атрибут
src
из изображений - Сохраните агент для запуска в облаке.
На этот же вопрос ответили на форуме Agenty - https: / /forum.agenty.com/t/can-i-extract-images-from-website/24
Полное раскрытие информации - я работаю в агентстве
Этот сайт использует CSS для встраивания изображений. Если вы проверите исходный код, вы можете найти ссылки, в которых есть https: // images1. mcmaster.com/init/gfx/home/ - это фактические изображения, но они фактически сшиты вместе (ряд изображений)
import requests
import re
url=('https://www.mcmaster.com/')
image_urls = []
html_page = requests.get(url,headers={'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.108 Safari/537.36'}).text
for values in re.findall('https://images1.mcmaster.com/init/gfx/home/.*[0-9]',html_page):
if str(values).startswith('http') and len(values) < 150:
image_urls.append(values.strip())
else:
for elements in values.split('background-image:url('):
for urls in re.findall('https://images1.mcmaster.com/init/gfx/home/.*[0-9]',elements):
urls = str(urls).split('")')[0]
image_urls.append(urls.strip())
print(len(image_urls))
print(image_urls)
Не так . Соскреб веб-сайта защищен авторскими правами.
Вам следует использовать scrapy, чтобы сделать сканирование беспроблемным, выбрав содержание, которое вы хотите загрузить с помощью тегов css . Вы можете легко автоматизировать сканирование.
Похожие вопросы
Новые вопросы
python
Python - это многопарадигмальный, динамически типизированный, многоцелевой язык программирования. Он разработан для быстрого изучения, понимания и использования, а также для обеспечения чистого и единообразного синтаксиса. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Тем не менее, для вопросов о Python, связанных с версией, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas и NumPy) включите его в теги.