Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 26.09.2021
Сообщений: 1

Проблема с парсером

26.09.2021, 10:41. Показов 731. Ответов 0

Студворк — интернет-сервис помощи студентам
Здравствуйте, возникла необходимость получить некоторые данные с сайта. В программировании на уровне Привет, Мир. Но задачу нужно было решить. Требуется чтобы парсер с исходной страницы извлёк все ссылки, потом перешёл по каждой ссылке и вытащил требуемую информацию. Как собрать ссылки я разобрался, как вытащить данные со страниц тоже, а вот как это совместить ума не приложу.
Такой код у меня получился, но ругается(((
Кликните здесь для просмотра всего текста
Python
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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
import requests
from bs4 import BeautifulSoup
import csv
 
from requests import Response
 
CSV = 'cards.csv'
HOST = 'https://tophotels.ru'
URL = 'https://tophotels.ru/catalog/hotel/12'
HEADERS = {
    'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Safari/537.36'
}
 
 
# Получаем код страницы
def get_html(url, params=''):
    r = requests.get(url, headers=HEADERS, params=params)
    return r
 
 
# Получаем ссылки отелей на одной странице
def get_link(html):
    soup = BeautifulSoup(html.text, 'html.parser')
    items = soup.find_all('div', class_='hotel__info')
    links = []
 
    for item in items:
        links.append(
            {
                'hotel_link': HOST + item.find('a', class_='hotel__name').get('href')
            }
        )
    return links
 
 
# Получаем название отеля
def get_name(html):
    soup = BeautifulSoup(html.text, 'html.parser')
    items = soup.find_all('table', class_='dropdown-item__description-tbl')
    names = []
 
    for item in items:
        names.append(
            {
                'hotel_name': item.find('td', class_='dropdown-item__description-tbl-name').get_text(strip=True)
            }
        )
 
    return names
 
 
# Получаем последние 5 отзывов
def get_rate(html):
    soup = BeautifulSoup(html.text, 'html.parser')
    items = soup.find_all('article', class_='reviews-short__item')
    rates = []
 
    for item in items:
        rates.append(
            {
                'hotel_rates': item.find('span', class_='reviews-short__rev').get_text()
            }
        )
 
    return rates
 
 
# Сохраняем документ
def save_doc(items, path):
    with open(path, "w", newline='') as file:
        writer = csv.writer(file, delimiter=';')
        writer.writerow(['Ссылка'])
        for item in items:
            writer.writerow([item['hotel_link']])
 
 
# html = get_html(URL)
# suma = get_name(html) + get_rate(html)
# print(get_link(html))
 
# Получаем список ссылок с учётом пагинации
def parser_link():
    PAGENATION = input('Укажите количество страниц для парсинга: ')
    PAGENATION = int(PAGENATION.strip())
    html = get_html(URL)
    if html.status_code == 200:
        links = []
        for page in range(1, PAGENATION):
            print(f'Парсим страницу: {page}')
            html = get_html(URL, params={'page': page})
            links.extend(get_link(html))
    else:
        print('Error')
 
    return links
 
def get_data(links):
    for url in links:
        print(url)
        html = get_html(url)
        all = get_name(html) + get_rate(html)
        return all
 
def parse():
    all = get_data(parser_link())
    print(all)
 
parse()


Выдаваемые ошибки:

Кликните здесь для просмотра всего текста
Code
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
E:\Каталог\progr\venv\Scripts\python.exe E:/Каталог/progr/parcer3.py
Укажите количество страниц для парсинга: 2
Парсим страницу: 1
{'hotel_link': 'https://tophotels.ru/hotel/al4115'}
Traceback (most recent call last):
  File "E:\Каталог\progr\parcer3.py", line 109, in <module>
    parse()
  File "E:\Каталог\progr\parcer3.py", line 106, in parse
    all = get_data(parser_link())
  File "E:\Каталог\progr\parcer3.py", line 101, in get_data
    html = get_html(url)
  File "E:\Каталог\progr\parcer3.py", line 18, in get_html
    r = requests.get(url, headers=HEADERS, params=params)
  File "E:\Каталог\progr\venv\lib\site-packages\requests\api.py", line 75, in get
    return request('get', url, params=params, **kwargs)
  File "E:\Каталог\progr\venv\lib\site-packages\requests\api.py", line 61, in request
    return session.request(method=method, url=url, **kwargs)
  File "E:\Каталог\progr\venv\lib\site-packages\requests\sessions.py", line 542, in request
    resp = self.send(prep, **send_kwargs)
  File "E:\Каталог\progr\venv\lib\site-packages\requests\sessions.py", line 649, in send
    adapter = self.get_adapter(url=request.url)
  File "E:\Каталог\progr\venv\lib\site-packages\requests\sessions.py", line 742, in get_adapter
    raise InvalidSchema("No connection adapters were found for {!r}".format(url))
requests.exceptions.InvalidSchema: No connection adapters were found for "{'hotel_link': 'https://tophotels.ru/hotel/al4115'}"
 
Process finished with exit code 1


если не трудно, подскажите куда дальше двигаться)
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
26.09.2021, 10:41
Ответы с готовыми решениями:

Проблема с парсером
Здравствуйте, помогите пожалуйста с парсером. Нужно с сайта http://spys.one/free-proxy-list/RU/ спарсить proxy сервера получается...

Проблема с парсером
Надо написать парсер на php, с яндексом работает нормально, но youtube.com, например не парсит. код: include 'curl_query.php'; ...

Проблема с парсером
В общем проблема в следующем. Есть сайт со списком тв программ. Парсить оттуда список не представляет сложности но список не совсем...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
26.09.2021, 10:41
Помогаю со студенческими работами здесь

Проблема с парсером
Пишу парсер данных, так как данных очень много для каждого типа использую свою модель Проблема заключается в том , что когда мне надо...

Проблема с парсером json
доброго времени суток, форумчане! проблема такого рода - пишу программу для работы с апи окдеск и наткнулся на новый рубеж в виде...

Проблема с парсером php - curl
Нашел квот такой код, парсинга информации с сайта. С использованием проксей. Все пашет, если пользую soks5 Если подключаю http прокси, то...

Проблема с парсером: как переделать ссылки
Делаю парсер сайтов. Через curl. В итоге, в адресной строке браузера получается mysite.ru/parser.php, а в ссылках на спарсенной странице -...

Калькулятор с парсером
Нужно написать калькулятор с парсером. Его задача - работа над введёнными, в поле ввода текста, выражения. Например: ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США. Нашел на реддите интересную статью под названием «Кто-нибудь знает, где получить бесплатный компьютер или. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru