Нужно, чтобы парсер переходил по ссылкам и собирал все информацию
Мне нужно, чтобы парсер собирал все ссылки с одной страницы, после чего переходил по этим ссылкам и собирал оттуда всю информацию. Но при выполнении кода выводится только последний компонент списка svarka.
Вот код:
import requests
from bs4 import BeautifulSoup
import csv
import os
URL = 'https://ptk-svarka.ru/catalog/apparaty-poluavtomaticheskoy-svarki-mig'
HEADERS = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36', 'accept': '*/*'}
FILE = 'svarka.csv'
def get_html(url, params=None):
r = requests.get(url, headers=HEADERS, params=params)
return r
def get_Stranic(html):
soup = BeautifulSoup(html, 'html.parser')
items = soup.find_all('div', class_='b-grid__item js-product-item')
stranica_svarka=[]
for item in items:
stranica_svarka.append(
item.find('a', class_='b-products__text').get('href'),
)
return stranica_svarka
def get_html_vivod(stranic):
for url in stranic:
r = requests.get(url, headers=HEADERS)
r = r.content
soup = BeautifulSoup(r, 'html.parser')
items = soup.find_all('article', class_='b-product__wrapper')
svarka = []
for item in items:
svarka.append({
'title': item.find('h1', class_='b-product__title').get_text(strip=True)
})
return svarka
def parse():
URL = input('Введите URL: ')
URL = URL.strip()
html = get_html(URL)
if html.status_code == 200:
stranic = get_Stranic(html.text)
svarka = get_html_vivod(stranic)
print (svarka)
else:
print('Error')
parse()
Ответы (1 шт):
Автор решения: Viewed
→ Ссылка
Ошибка в разных областях видимости. В вашем случае svarka живет только в цикле for url in stranic и каждую итерацию обновляется новым значением [], удаляя предыдущий прогресс.
Нужно вынести инициализацию листа svarka на тот же уровень отступов, что и return.
def get_html_vivod(stranic):
svarka = []
for url in stranic:
# ...
return svarka