#python #beautifulsoup
Вопрос:
Если я напишу http://www.chictopia.com/photo/show/3
Я могу получить соответствующий файл с изображением.
Однако, если я установлю диапазон для обхода изображения на нескольких веб-страницах с использованием цикла for, я не смогу получить файл изображения, похоже, файл размером 0 байт загружен
f’http://www.chictopia.com/photo/show/ {x}
почему я могу получить файл изображения объемом 0 байт и может ли кто-нибудь объяснить, как анализировать изображение нескольких страниц.
Спасибо
import re
import requests
from bs4 import BeautifulSoup
for x in range (3,6):
response = requests.get(f'http://www.chictopia.com/photo/show/ {x}')
print (response)
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_-] [400] [.](jpg))
Ответ №1:
попробуйте изменить шаблон регулярного выражения и использовать измененный вызов на правильный URL-адрес изображения. теперь этот код сохранит все изображения, содержащие _400.jpg в их ссылке указано следующее имя.
import re
import requests
from bs4 import BeautifulSoup
import shutil
for x in range (3,6):
response = requests.get(f'http://www.chictopia.com/photo/show/ {x}')
# print (response.status_code)
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.findall(r'(. _400.jpg)', url)
if len(filename) != 0:
image = filename[0]
image_name = f"image_{image.split('/')[-1]}"
response = requests.get(image, stream=True)
with open(image_name, 'wb') as out_file:
shutil.copyfileobj(response.raw, out_file)
print(f'Saved : {image_name}')
например.
http://images2.chictopia.com/photos/mikajones/2162299642/2162299642_400.jpg -> как image_2162299642_400.jpg
теперь, что не так с вашим кодом:
вы использовали неправильное регулярное выражение и взяли соответствующее значение, которое не является полным URL-адресом изображения, поэтому вы получаете нулевое значение для размера изображения (вы даже не вызываете URL-адрес изображения).
все исправлено.
Комментарии:
1. Большое спасибо!!
, url)
if not filename:
print("fail".format(url))
continue
with open(filename.group(1), 'wb') as f:
if 'http' not in url:
url = '{}{}'.format(response, url)
response = requests.get(url)
f.write(response.content)
Ответ №1:
попробуйте изменить шаблон регулярного выражения и использовать измененный вызов на правильный URL-адрес изображения. теперь этот код сохранит все изображения, содержащие _400.jpg в их ссылке указано следующее имя.
например.
http://images2.chictopia.com/photos/mikajones/2162299642/2162299642_400.jpg -> как image_2162299642_400.jpg
теперь, что не так с вашим кодом:
вы использовали неправильное регулярное выражение и взяли соответствующее значение, которое не является полным URL-адресом изображения, поэтому вы получаете нулевое значение для размера изображения (вы даже не вызываете URL-адрес изображения).
все исправлено.
Комментарии:
1. Большое спасибо!!