-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathparser.py
More file actions
74 lines (60 loc) · 2.78 KB
/
Copy pathparser.py
File metadata and controls
74 lines (60 loc) · 2.78 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
import requests
from bs4 import BeautifulSoup
import csv
# Реальный URL каталога книг (сайт работает на поддомене 1.librebook.me)
URL = "https://1.librebook.me/list"
HEADERS = {
"User-Agent": (
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) "
"AppleWebKit/537.36 (KHTML, like Gecko) "
"Chrome/120.0.0.0 Safari/537.36"
)
}
def parse_page():
try:
response = requests.get(URL, headers=HEADERS, timeout=10)
response.raise_for_status()
except requests.exceptions.ConnectionError:
print(f"Ошибка: не удалось подключиться к {URL}. Проверьте интернет-соединение.")
return
except requests.exceptions.Timeout:
print(f"Ошибка: превышено время ожидания ответа от {URL}.")
return
except requests.exceptions.HTTPError as e:
print(f"Ошибка HTTP: {e}")
return
except requests.exceptions.RequestException as e:
print(f"Неожиданная ошибка при запросе: {e}")
return
soup = BeautifulSoup(response.text, "html.parser")
# Карточки книг: div.tile
books = soup.find_all("div", class_="tile")
data = []
for book in books:
desc = book.find("div", class_="desc")
if not desc:
continue
# Название: div.desc -> h3 -> a
h3 = desc.find("h3")
title = h3.find("a").get_text(strip=True) if h3 and h3.find("a") else "—"
# Автор: a.person-link внутри div.tile-info
author_tag = book.find("a", class_="person-link")
author = author_tag.get_text(strip=True) if author_tag else "—"
# Рейтинг: атрибут title у div.compact-rate, меняем точку на запятую для Excel
rating_tag = book.find("div", class_="compact-rate")
rating = rating_tag["title"].replace(".", ",") if rating_tag and rating_tag.get("title") else "—"
if title != "—":
data.append((title, author, rating))
if not data:
print("Предупреждение: книги не найдены.")
print("Возможно, сайт требует JavaScript или изменил структуру.")
else:
print(f"Найдено книг: {len(data)}")
# Разделитель ";" — Excel открывает корректно без настроек
with open("format.csv", "w", newline="", encoding="utf-8-sig") as f:
writer = csv.writer(f, delimiter=";")
writer.writerow(["Название", "Автор", "Рейтинг"])
writer.writerows(data)
print("Парсинг завершен")
if __name__ == "__main__":
parse_page()