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

Парсинг по сайту

08.07.2020, 10:37. Показов 2368. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Написал приложение, которое загружает страницу с сайта, сохраняет фотографию, переходит на следующую и повторяет, но при переходе на следующую страницу появляется ошибка. Кто подскажет, что я не так делаю?

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
#! python 3
#Загрузка фото с рускоязычного сайта xkcd
 
import os, bs4, requests
 
url = 'https://xkcd.ru/'
path = r'D:омикс'
os.makedirs(path, exist_ok=True)
 
while not url.endswith('#'):
    #Загрузить страницу
    res = requests.get(url)
    res.raise_for_status()
    soup = bs4.BeautifulSoup(res.text, features="html.parser")
    #print(soup)
 
    #Определить url-адрес следующей страницы
    comicElem = soup.select('img')
    print('Это комикЭлем - {}'.format(comicElem))
    if comicElem[0] == []:
        print('На данной странице {} рисунков не найдено!'.format(url))
    else:
        comicUrl = comicElem[0].get('src')
        print(comicUrl)
        print('Загружается изображение - {} '.format(os.path.basename(comicUrl)))
        res = requests.get('https://xkcd.com/'+comicUrl)
        res.raise_for_status()
 
    imageFile = open(os.path.join(path, os.path.basename(comicUrl)), 'wb')
    for chunk in res.iter_content(100000):
        imageFile.write(chunk)
    imageFile.close()
 
    prevLink = soup.select('.nav')[2]
    #print(prevLink)
    url = 'https://xkcd.com/' + prevLink.get('href')
 
print('Готово')

C:\Users\администратор\PycharmProjects\u ntitled\venv\Scripts\python.exe C:/Users/администратор/.PyCharm2019.2/config/scratches/XKCD-RU.py
Это комикЭлем - [<img alt="Эффект БДЛПСУДКС" border="0" src="https://xkcd.ru/i/1531_v5.png"/>, <img alt="ОднаКнопка" border="0" height="16" src="/static/odnaknopka.gif" width="136"/>]
https://xkcd.ru/i/1531_v5.png
Загружается изображение - 1531_v5.png
Traceback (most recent call last):
File "C:/Users/администратор/.PyCharm2019.2/config/scratches/XKCD-RU.py", line 27, in <module>
res.raise_for_status()
File "C:\Users\администратор\PycharmProjects\ untitled\venv\lib\site-packages\requests\models.py", line 941, in raise_for_status
raise HTTPError(http_error_msg, response=self)
requests.exceptions.HTTPError: 404 Client Error: Not Found for url: https://xkcd.com/https://xkcd.ru/i/1531_v5.png

Process finished with exit code 1
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
08.07.2020, 10:37
Ответы с готовыми решениями:

Парсинг запроса к сайту
я открываю сайт aiesec.org и в отладчике хрома, во вкладке network появляется пара ссылок примерно как ...

Парсинг JSON ответа. Парсинг строки с массивами
public class LocationData { public double Center { get; set; } } public class Field : IField ...

Парсинг по порядку или парсинг до определенного тега
Доброго времени друзья! Подскажите пожалуйста, к примеру есть вот такой html код: &lt;div class=&quot;container mt-3&quot;&gt; ...

14
Модератор
Эксперт Python
 Аватар для Fudthhh
2695 / 1601 / 513
Регистрация: 21.02.2017
Сообщений: 4,210
Записей в блоге: 1
08.07.2020, 10:44
Не благодари:

Цитата Сообщение от Димтри Посмотреть сообщение
HTTPError: 404 Client Error: Not Found for url
0
0 / 0 / 0
Регистрация: 14.11.2016
Сообщений: 45
08.07.2020, 11:42  [ТС]
Отредактировал код получилось:
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
#! python 3
#Загрузка фото с рускоязычного сайта xkcd
 
import os, bs4, requests
 
url = 'https://xkcd.ru/'
path = r'D:омикс'
os.makedirs(path, exist_ok=True)
 
while not url.endswith('#'):
    #Загрузить страницу
    res = requests.get(url)
    res.raise_for_status()
    soup = bs4.BeautifulSoup(res.text, features="html.parser")
    #print(soup)
 
    #Определить url-адрес следующей страницы
    comicElem = soup.select('img')
 
    #print('Это комикЭлем - {}'.format(comicElem))
    if comicElem[0] == []:
        print('На данной странице {} рисунков не найдено!'.format(url))
    else:
        comicUrl = comicElem[0].get('src')
        #print('!Комик елем - ', comicElem[0])
        #print('Комик url - ', comicUrl)
        print('Загружается изображение - {} '.format(os.path.basename(comicUrl)))
        res = requests.get(comicUrl)
        res.raise_for_status()
 
    imageFile = open(os.path.join(path, os.path.basename(comicUrl)), 'wb')
    for chunk in res.iter_content(100000):
        imageFile.write(chunk)
    imageFile.close()
 
    prevLink = soup.select('.nav')[2]
    #print(prevLink)
    url = 'https://xkcd.com/' + prevLink.get('href')
 
print('Готово')
Загружается одна фотография, после этого ошибка:

C:\Users\администратор\PycharmProjects\u ntitled\venv\Scripts\python.exe C:/Users/администратор/.PyCharm2019.2/config/scratches/XKCD-RU.py
Загружается изображение - 1531_v5.png
Загружается изображение - 0b7742.png
Traceback (most recent call last):
File "C:/Users/администратор/.PyCharm2019.2/config/scratches/XKCD-RU.py", line 28, in <module>
res = requests.get(comicUrl)
File "C:\Users\администратор\PycharmProjects\ untitled\venv\lib\site-packages\requests\api.py", line 76, in get
return request('get', url, params=params, **kwargs)
File "C:\Users\администратор\PycharmProjects\ untitled\venv\lib\site-packages\requests\api.py", line 61, in request
return session.request(method=method, url=url, **kwargs)
File "C:\Users\администратор\PycharmProjects\ untitled\venv\lib\site-packages\requests\sessions.py", line 516, in request
prep = self.prepare_request(req)
File "C:\Users\администратор\PycharmProjects\ untitled\venv\lib\site-packages\requests\sessions.py", line 459, in prepare_request
hooks=merge_hooks(request.hooks, self.hooks),
File "C:\Users\администратор\PycharmProjects\ untitled\venv\lib\site-packages\requests\models.py", line 314, in prepare
self.prepare_url(url, params)
File "C:\Users\администратор\PycharmProjects\ untitled\venv\lib\site-packages\requests\models.py", line 388, in prepare_url
raise MissingSchema(error)
requests.exceptions.MissingSchema: Invalid URL '/s/0b7742.png': No schema supplied. Perhaps you meant http:///s/0b7742.png?

Process finished with exit code 1
0
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7392 / 4819 / 1246
Регистрация: 30.03.2015
Сообщений: 13,694
Записей в блоге: 29
08.07.2020, 12:05
Цитата Сообщение от Димтри Посмотреть сообщение
Invalid URL '/s/0b7742.png': No schema supplied. Perhaps you meant http:///s/0b7742.png?
если долго смотреть на эту строку то могут внезапно появиться мысли
1
Модератор
Эксперт Python
 Аватар для Fudthhh
2695 / 1601 / 513
Регистрация: 21.02.2017
Сообщений: 4,210
Записей в блоге: 1
08.07.2020, 12:23
Welemir1, после этого поста я понял, что там все потеряно.
0
0 / 0 / 0
Регистрация: 14.11.2016
Сообщений: 45
08.07.2020, 12:42  [ТС]
Я начинаю изучать язык, очень много непонятного и соответственно ошибаюсь.
0
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7392 / 4819 / 1246
Регистрация: 30.03.2015
Сообщений: 13,694
Записей в блоге: 29
08.07.2020, 12:44
Лучший ответ Сообщение было отмечено Димтри как решение

Решение

Димтри, его начинают изучать не с парсинга, а привет мир, списки, атрибуты, слайсы и т.д.
А мой ответ полностью понятен, также как строка интерпретатора - не бывает в инете адреса /s/0b7742.png, должно быть что-то вроде https://xkcd.com/s/0b7742.png, ты забыл начало добавить.
Неужели не смог перевести строку в ошибке?
0
0 / 0 / 0
Регистрация: 14.11.2016
Сообщений: 45
08.07.2020, 12:50  [ТС]
Это я понял, не мог понять от куда она берется. Первая страница загружается нормально, оказалось сам ошибся в коде.
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
08.07.2020, 12:52
Димтри,
Тебе товарищи все верно описали.
Но если тебя так сильно волнует сабж, который ты не по силам взвалил на свои пока хрупкие плечи, то вот:
в html далеко не всегда url'ы идут полным адресом. Они могут быть как абсолютными: "https://xkcd.ru/i/1531_v5.png",
так и относительными: "/i/1531_v5.png"
И поэтому нормальный программист всегда проверяет - абсолютный url или нет (точно также как в файловой системе). И если нет - подставляет хост.
А если пользоваться нормальными либами для парсинга (а не УГ типа bs4), то там это все вообще на автомате можно сделать.
0
 Аватар для Miryz
291 / 131 / 58
Регистрация: 24.11.2019
Сообщений: 532
08.07.2020, 13:00
Цитата Сообщение от Welemir1 Посмотреть сообщение
его начинают изучать не с парсинга, а привет мир, списки, атрибуты, слайсы и т.д.
ну я бы начал с основ английского языка...

Добавлено через 2 минуты
Цитата Сообщение от Garry Galler Посмотреть сообщение
нормальными либами для парсинга
поделись тогда
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
08.07.2020, 13:02
Цитата Сообщение от Miryz Посмотреть сообщение
поделись тогда
Это и так все знают: lxml, промышленный стандарт в мире Python.
0
 Аватар для Miryz
291 / 131 / 58
Регистрация: 24.11.2019
Сообщений: 532
08.07.2020, 13:04
Garry Galler, а начинающие?
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
08.07.2020, 13:08
Цитата Сообщение от Miryz Посмотреть сообщение
а начинающие?
Что начинающие?
В lxml парсинг производится двумя строками:

Python
1
2
root = lxml.html.fromstring(html)
match =  root.xpath("//что_ищем")
0
 Аватар для Miryz
291 / 131 / 58
Регистрация: 24.11.2019
Сообщений: 532
08.07.2020, 13:14
Garry Galler, я не про синтаксис, а вообще про его существование. Гуглишь и в первую очередь попадается BS.
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
08.07.2020, 13:21
Цитата Сообщение от Miryz Посмотреть сообщение
Гуглишь и в первую очередь попадается BS.
Мне было достаточно того, что зайдя один раз в доки bs4 я обнаружил, что lxml упоминается там гораздо чаще, чем сама bs4.
После этого в доки bs4 я больше не заходил.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
08.07.2020, 13:21
Помогаю со студенческими работами здесь

Парсинг JSON ответа. Парсинг строки с массивами
Есть ответ с сервера в виде json: ,\&quot;Polygon\&quot;:,]}&quot;, &quot;OrganizationId&quot;: 2, &quot;SyncDate&quot;: &quot;2021-01-20T11:23:42.007&quot; ...

По сайту!
Всем Пис! Мысли закончились, дайте совет, что нужно делать дальше (я об оптимизации сайта)--- www.rodget.ru. Принимаются все мысли! ...

Поиск по сайту
Подскажите как сделать чтобы поиск был по определенной странице (разделам), и можно ли сделать так что-бы на разных страницах был поиск...

Поиск по сайту
Подскажите как сделать чтобы поиск был по определенной странице (разделам), и можно ли сделать так что-бы на разных страницах был поиск...

Подключение к сайту
Я знаю вопрос часто задавался в той или иной форме, но конкретного ответа я не увидел нигде. Вообщем не могли бы (кто знает) скинуть самый...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при создании или изменении элементов справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной записи электронной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru