Парсинг выдаёт только одну картинку вместо всех возможных (Python)
Вот код на python:
import requests
from bs4 import BeautifulSoup
#переменная показывающая номер домена
a = 0
def parse_img(g):
for i in range(g):
global a
a += 1
url = 'https://www.1zoom.ru/%D0%96%D0%B8%D0%B2%D0%BE%D1%82%D0%BD%D1%8B%D0%B5/%D0%9A%D0%BE%D1%82%D1%8F%D1%82%D0%B0/t2/'
HEADERS = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36'}
html = requests.get(url + str(a), headers = HEADERS )
print(html.url)
html = html.text
soup = BeautifulSoup(html, 'lxml')
div_tags = soup.find_all('div', {'id': 'suda'})
img_tags = [div.find('img') for div in div_tags]
url_img = [img['src'] for img in img_tags]
return url_img
#Парсинг первого домена
print(parse_img(1))
В результате с сайта парсится только одна картинка вместо всех картинок на сайте
Вывод:
https://www.1zoom.ru/%D0%96%D0%B8%D0%B2%D0%BE%D1%82%D0%BD%D1%8B%D0%B5/%D0%9A%D0%BE%D1%82%D1%8F%D1%82%D0%B0/t2/1/
['https://s1.1zoom.ru/prev2/581/Ginger_color_Cute_Kittens_580356_300x214.jpg']
И у меня вопрос, как сделать, чтобы пасились все картинки с доменов сайта, а не только одна.
Ответы (1 шт):
Автор решения: gil9red
→ Ссылка
Переписал парсер:
- Использовал парсер "из коробки":
html.parser - Поиск картинок сделан через css-селектор
#suda-- поиск элемента сid="suda".ph-- элемент сclass="ph">-- указание, что элемент справа является прямым ребенком элемента слева. Т.е..ph > aговорит, что у элемента с класомphесть вложенный элемент<a>img[src]-- поиск<img>у которого будет аттрибутsrc
- Небольшой рефакторинг
import requests
from bs4 import BeautifulSoup
def get_imgs(page: int) -> list:
HEADERS = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36'
}
url = f'https://www.1zoom.ru/Животные/Котята/t2/{page}'
rs = requests.get(url, headers=HEADERS)
root = BeautifulSoup(rs.content, 'html.parser')
return [img['src'] for img in root.select('#suda .ph > a > img[src]')]
# Парсинг первой страницы
imgs = get_imgs(1)
print(len(imgs), imgs)
# 30 ['https://s1.1zoom.ru/prev2/581/Ginger_color_Cute_Kittens_580356_300x214.jpg', ...
# Парсинг второй страницы
imgs = get_imgs(2)
print(len(imgs), imgs)
# 30 ['https://s1.1zoom.ru/prev2/570/Cats_White_background_Kittens_569316_300x200.jpg', ...
