Скрипт для извлечения всех изображений с веб-страницы - PullRequest
0 голосов
/ 18 февраля 2019

Я пытаюсь использовать следующий код для извлечения всех изображений со страницы, но он выдает ошибку «Нетипичный» объект не имеет атрибута «группа».Может кто-нибудь сказать мне, в чем здесь проблема?

import re
import requests
from bs4 import BeautifulSoup

site = 'http://pixabay.com'

response = requests.get(site)

soup = BeautifulSoup(response.text, 'html.parser')
img_tags = soup.find_all('img')

urls = [img['src'] for img in img_tags]


for url in urls:
    filename = re.search(r'/([\w_-]+[.](jpg|gif|png))$', url)
    with open(filename.group(1), 'wb') as f:
        if 'http' not in url:
            # sometimes an image source can be relative 
            # if it is provide the base url which also happens 
            # to be the site variable atm. 
            url = '{}{}'.format(site, url)
        response = requests.get(url)
        f.write(response.content)

1 Ответ

0 голосов
/ 18 февраля 2019

РЕДАКТИРОВАТЬ: Для контекста, так как исходный вопрос был обновлен кем-то еще и изменил исходный код, исходный шаблон, который использовал пользователь, был r'/([\w_-]+.)$'.Это была оригинальная проблема.Этот контекст позволит сделать следующий ответ более понятным:

Я использовал шаблон, подобный r'/([\w_.-]+)$'.Шаблон, который вы использовали, не позволял пути содержать ., за исключением последнего символа, потому что . вне [] означает любой символ, и вы имели его прямо перед $ (конец строки).Поэтому я переместил . в [], что означает, что в группу символов можно включить литерал ..Это позволило шаблону захватывать имена файлов изображений в конце URL.

import re
import requests
from bs4 import BeautifulSoup

site = 'http://pixabay.com'

response = requests.get(site)

soup = BeautifulSoup(response.text, 'html.parser')
img_tags = soup.find_all('img')

urls = [img['src'] for img in img_tags]

for url in urls:
    filename = re.search(r'/([\w_.-]+)$', url)
    with open(filename.group(1), 'wb') as f:
        if 'http' not in url:
            # sometimes an image source can be relative
            # if it is provide the base url which also happens
            # to be the site variable atm.
            url = '{}{}'.format(site, url)
        response = requests.get(url)
        f.write(response.content)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...