Когда парсю сайт, не на всех страницах есть теги которые нужно спарсить и из за этого возвращает тип None из за которого данные не добавить в Excel
main.py
from bs4 import BeautifulSoup
headers = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \
Chrome/106.0.0.0 YaBrowser/22.11.0.2419 Yowser/2.5 Safari/537.36'}
def get_url():
for count in range(0, 2):
url = f'https://fabricators.ru/zavody?page={count}'
response = requests.get(url)
soup = BeautifulSoup(response.text, "html.parser")
data = soup.find_all("div", class_="content-list-item enterprise-teaser")
for items in data:
href_url = "https://fabricators.ru/" + items.find("a").get("href")
yield href_url
def array():
for zavody_url in get_url():
# Делаем запрос к списку заводов
response = requests.get(zavody_url)
# Парсим
soup = BeautifulSoup(response.text, "html.parser")
# Парсим название предприятия
name = soup.find("h1", class_="col-wt").text
# Парсим категорию предприятия
category = soup.find("ul", class_="bread-crumbs").findNext("a").findNext("a").findNext("a").text
# Парсим категорию предприятия
category_2 = soup.find("ul", class_="bread-crumbs").findNext("a").findNext("a").findNext("a").findNext("a").text
# Парсим описание
description = soup.find("div", class_="about-project").text
# Парсим продукты
# Парсим реквизиты
entity_name = soup.find("div", class_="content-contact-list")\
.find("div", class_="content-contact-item__block").text
# Парсим ИНН
inn = soup.find("div", class_="content-contact-item").find_next("div", class_="content-contact-item") \
.find("div", class_="content-contact-item__block").text
# Парсим ОГРН
ogrn = soup.find("div", class_="content-contact-item").find_next("div", class_="content-contact-item") \
.find_next("div", class_="content-contact-item").find("div", class_="content-contact-item__block").text
# Парсим контакты
# Парсим местонахождение
locality = soup.find("div", class_="content-contact-item__block")\
.find_next("div", class_="content-contact-item__block")\
.find_next("div", class_="content-contact-item__block")\
.find_next("div", class_="content-contact-item__block")\
.find_next("div", class_="content-contact-item__block")\
.text
# Парсим Регион
region = soup.find("div", class_="content-contact-item__block")\
.find_next("div", class_="content-contact-item__block")\
.find_next("div", class_="content-contact-item__block")\
.find_next("div", class_="content-contact-item__block").text.replace("\n", "")
# Парсим номер телефона
phone = soup.find("div", class_="content-contact-item__block")\
.find_next("div", class_="content-contact-item__block")\
.find_next("div", class_="content-contact-item__block")\
.find_next("div", class_="content-contact-item__block")\
.find_next("div", class_="content-contact-item__block")\
.find_next("div", class_="content-contact-item__block").string
# Парсим веб сайт
website = soup.find("div", class_="content-contact")\
.find("div", class_="field field-name-field-site field-type-link-field field-label-hidden").find("a")
yield category, category_2, name, description, entity_name, inn, ogrn, locality, region, phone, website```
Второй файл xl.py
```import xlsxwriter
from main import array
def writer(parametr):
book = xlsxwriter.Workbook(r'C:\Users\user\PycharmProject\PCinform\data.xlsx')
page = book.add_worksheet('Data')
row = 0
column = 0
page.set_column("A:A", 50)
page.set_column("B:B", 50)
page.set_column("C:C", 50)
page.set_column("D:D", 450)
page.set_column("E:E", 100)
page.set_column("F:F", 50)
page.set_column("G:G", 50)
page.set_column("H:H", 50)
page.set_column("I:I", 150)
page.set_column("J:J", 50)
page.set_column("K:K", 50)
page.set_column("L:L", 50)
page.set_column("M:M", 50)
for item in parametr():
page.write(row, column, item[0])
page.write(row, column+1, item[1])
page.write(row, column+2, item[2])
page.write(row, column+3, item[3])
page.write(row, column+4, item[4])
page.write(row, column+5, item[5])
page.write(row, column+6, item[6])
page.write(row, column+7, item[7])
page.write(row, column+8, item[8])
page.write(row, column+9, item[9])
page.write(row, column+10, item[10])
row += 1
book.close()
writer(array)
Код ошибки
```Traceback (most recent call last):
File "C:\Users\user\PycharmProject\PCinform\xl.py", line 45, in <module>
writer(array)
File "C:\Users\user\PycharmProject\PCinform\xl.py", line 26, in writer
for item in parametr():
File "C:\Users\user\PycharmProject\PCinform\main.py", line 80, in array
website = soup.find("div", class_="content-contact")\
AttributeError: 'NoneType' object has no attribute 'find'```
Ответы (1 шт):
Автор решения: Сергей Ш
→ Ссылка
import requests
import xlsxwriter
from bs4 import BeautifulSoup
def get_url():
for count in range(2):
url = f'https://fabricators.ru/zavody?page={count}'
response = requests.get(url)
soup = BeautifulSoup(response.text, "html.parser")
data = soup.find_all("a", class_="title-site--h3")
for items in data:
yield "https://fabricators.ru/" + items.get("href")
def array():
for zavody_url in get_url():
# Делаем запрос к списку заводов
response = requests.get(zavody_url)
# Парсим
soup = BeautifulSoup(response.text, "html.parser")
# Парсим название предприятия
name = soup.find("h1", class_="col-wt").text
# Парсим категорию предприятия
*_, category, category_2, _ = soup.find("ul", class_="bread-crumbs").stripped_strings
# Парсим описание
description = soup.find("div", class_="about-project").text.strip()
# Парсим продукты
# Парсим реквизиты
entity_name, inn, ogrn, locality, region, phone, \
*_ = (x.text.strip() for x in soup.findAll("div", class_="content-contact-item__block"))
website = ''
if z := soup.find(attrs={"class": "field-item"}).find("a"):
website = z.get('href').split('?')[0]
yield category, category_2, name, description, entity_name, inn, ogrn, locality, region, phone, website
def writer(parametr):
book = xlsxwriter.Workbook(r'data.xlsx')
page = book.add_worksheet('Data')
row = 0
column = 0
for x in 'ABCFGJHJKLM':
page.set_column(f"{x}:{x}", 50)
page.set_column("D:D", 450)
page.set_column("E:E", 100)
page.set_column("I:I", 150)
for item in parametr():
for x in range(11):
page.write(row, column + x, item[x])
row += 1
book.close()
writer(array)