Не работает скрипт с BeautifulSoup и requests (Python3x)
Попытался запарсить адреса картинок с сайта(https://amitego.ru/)
Получилось так:
import requests
from bs4 import BeautifulSoup
HEADERS = {
'user-agent': '*Скрыто*',
'accept': '*/*'
}
def get_html(url):
r = requests.get(url, headers=HEADERS)
return r.text
def get_images(html):
soup = BeautifulSoup(html, 'lxml')
a = soup.find('div', class_='pp-posts-container').find_all('div', class_='pp-post-thumbnail')
images = []
for i in images:
img = a.find('a').get('src')
images.append(a)
return images
def main():
url = 'https://amitego.ru/'
all_images = get_images(get_html(url))
for i in all_images:
print(i)
if __name__ == '__main__':
main()
При парсинге ничего не выдаёт и я не могу понять почему(
Пожалуйста, скажите, где у меня может быть ошибка.
Ответы (2 шт):
Автор решения: nomnoms12
→ Ссылка
Есть несколько ошибок в этих строках:
a = soup.find('div', class_='pp-posts-container').find_all('div', class_='pp-post-thumbnail')
images = []
for i in images:
img = a.find('a').get('src')
images.append(a)
В цикле for Вы итерируетесь по пустому списку. То есть цикл не исполняется вовсе, а функция возвращает пустой список images.
Но даже если поправить ошибку и итерироваться по a, ничего толкового не выйдет, потому что переменную i Вы вообще не используете, да и ссылку получаете не на изображение, а на статью.
Работающий пример:
import requests
from bs4 import BeautifulSoup
def parse():
html = requests.get('https://amitego.ru/').text
soup = BeautifulSoup(html, 'lxml')
div_tags = soup.find_all('div', {'class': 'pp-post-thumbnail'})
img_tags = [div.find('img') for div in div_tags]
image_src = [img['data-src'] for img in img_tags]
return image_src
def main():
links = parse()
print(*links, sep='\n')
if __name__ == '__main__':
main()
stdout:
https://amitego.ru/wp-content/uploads/2020/03/gettyimages-1189261010-scaled.jpg
https://amitego.ru/wp-content/uploads/2020/02/litedesk-1.png
https://amitego.ru/wp-content/uploads/2020/02/1472905475_sd_maid_pro.jpg
https://amitego.ru/wp-content/uploads/2020/02/Z0JMHoqnCO4.jpg
https://amitego.ru/wp-content/uploads/2020/02/intel-neuromorphic-system-loihi.jpeg
https://amitego.ru/wp-content/uploads/2020/02/Windows-10-20H1.jpg
Автор решения: Wairua
→ Ссылка
import wget
import requests
from bs4 import BeautifulSoup as Soup
if __name__ == '__main__':
with requests.Session() as session:
soup = Soup(session.get('https://amitego.ru/').content, 'html.parser')
pages = int(soup.find('div', {'class': 'pp-posts-pagination-wrap'}).extract()['data-total']) + 1
links = []
for num in range(1, pages):
page = Soup(session.get(f'https://amitego.ru/?page={num}').content, 'html.parser')
links.extend([item.attrs['data-srcset'].split(',')[0].split()[0].strip()
for item in page.find_all('img', {'class': 'size-full'}) if 'data-srcset' in item.attrs])
print(*links, sep='\n')
Если вместо
print(*links, sep='\n')
добавить
for link in links:
wget.download(link, bar=None)
То код загрузит изображения
Там 6 страниц, код парсит все 6, ниже вывод:
https://amitego.ru/wp-content/uploads/2020/03/gettyimages-1189261010-scaled.jpg
https://amitego.ru/wp-content/uploads/2020/02/litedesk-1.png
https://amitego.ru/wp-content/uploads/2020/02/1472905475_sd_maid_pro.jpg
https://amitego.ru/wp-content/uploads/2020/02/Z0JMHoqnCO4.jpg
https://amitego.ru/wp-content/uploads/2020/02/intel-neuromorphic-system-loihi.jpeg
https://amitego.ru/wp-content/uploads/2020/02/Windows-10-20H1.jpg
https://amitego.ru/wp-content/uploads/2020/01/Android-Security-Patch-September-2017.jpg
https://amitego.ru/wp-content/uploads/2020/01/Аннотация-2020-01-29-232035.png
https://amitego.ru/wp-content/uploads/2020/01/004fe181da1577c5677f662bf5d3c260.jpg
https://amitego.ru/wp-content/uploads/2020/01/i.jpg
https://amitego.ru/wp-content/uploads/2020/01/52d30b22b88a476ee5aa97bba1aa82da.jpg
https://amitego.ru/wp-content/uploads/2020/01/kisspng-television-set-download-retro-old-antenna-tv-set-5a799c8ad3ab07.109004031517919370867-1.png
https://amitego.ru/wp-content/uploads/2020/01/Без-названия.jpeg
https://amitego.ru/wp-content/uploads/2019/12/Is-It-Too-Early-to-Start-Planning-For-2020-Tech-Critic-864x576-1.jpg
https://amitego.ru/wp-content/uploads/2019/12/Dr5whIHWoAIs5sI.jpg-large.jpg
https://amitego.ru/wp-content/uploads/2019/12/1515760522_201.jpg
https://amitego.ru/wp-content/uploads/2019/12/cinnamon-mint.jpg
https://amitego.ru/wp-content/uploads/2019/12/Аннотация-2019-12-19-175211.png
https://amitego.ru/wp-content/uploads/2019/12/translate-1500x10001-1.jpg
https://amitego.ru/wp-content/uploads/2019/12/Без-названия-5.jpeg
https://amitego.ru/wp-content/uploads/2019/12/Аннотация-2019-12-06-180411.png
https://amitego.ru/wp-content/uploads/2019/12/Annotatsiya-2019-12-06-080333.png
https://amitego.ru/wp-content/uploads/2019/12/desktop.jpg
https://amitego.ru/wp-content/uploads/2019/11/razrabotchik_cms_bitrix.jpg
https://amitego.ru/wp-content/uploads/2019/11/Annotatsiya-2019-11-20-222014.png
https://amitego.ru/wp-content/uploads/2019/11/k1gegUnLhZZTK-oOdPTEPDQUuymB8o_BIBF7-vWNaImHt4Q9kVLqtU0U8HYotElRtQh9001.png
https://amitego.ru/wp-content/uploads/2019/11/orig.png
https://amitego.ru/wp-content/uploads/2019/11/1449846994_maxresdefault.jpg
https://amitego.ru/wp-content/uploads/2019/11/Bez-nazvaniya.png
https://amitego.ru/wp-content/uploads/2019/10/image-10.png
https://amitego.ru/wp-content/uploads/2019/09/Без-названия-2.jpg
https://amitego.ru/wp-content/uploads/2019/09/image-4-1.jpeg
https://amitego.ru/wp-content/uploads/2019/09/Без-названия-1.jpg
https://amitego.ru/wp-content/uploads/2019/09/2.png
https://amitego.ru/wp-content/uploads/2019/09/1.png
https://amitego.ru/wp-content/uploads/2019/08/linux-desktops-709x381.jpg