С Новым годом! Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.85/13: Рейтинг темы: голосов - 13, средняя оценка - 4.85
11 / 10 / 2
Регистрация: 19.02.2018
Сообщений: 393

Как получить полный адрес веб страницы по ссылке

10.03.2020, 16:05. Показов 2552. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Ситуация такая есть сайт с рассылками по lua http://lua-users.org/lists/lua-l/

Нужно получить все ссылки

Python
1
2
3
4
5
6
7
8
html = urlopen("http://lua-users.org/lists/lua-l/")
soup = BeautifulSoup(html,"lxml")
div = soup.find_all('table')
for a in div:
  href= a.find_all('a')
  for b in href:
    s=str(b['href'])
    print(s)
Мы получаем такие ссылки /lists/lua-l/2020-01/, вместо таких http://lua-users.org/lists/lua-l/2020-01/
Приходится искать обходные пути, например, вот так.

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
import urllib.request
def loadweb(url):
 try:
  with urllib.request.urlopen(url) as response:
     html = response.read().decode('utf-8')#use whatever encoding as per the webpage
     soup2 = BeautifulSoup(html,"lxml")
     print(soup2.text)
 except urllib.request.HTTPError as e:
  if e.code==404:
    print(f"{url} is not found")
  elif e.code==503:
    print(f'{url} base webservices are not available')
  else:
    print('http error',e)
html = urlopen("http://lua-users.org/lists/lua-l/")
soup = BeautifulSoup(html,"lxml")
div = soup.find_all('table')
for a in div:
  href= a.find_all('a')
  for b in href:
    s=str(b['href'])
    res = s.find("lua-l")
    if res != -1:
     adres = "http://lua-users.org/"+str(b['href'])
     # print(adres)
     html = urlopen(adres)
     soup1 = BeautifulSoup(html,"lxml")
     div1 = soup1.find_all('a')
     for i in div1:
      adres2 =adres+ str(i['href'])
      res = adres2.find("html")
      if res != -1:
       # print(adres2)
       loadweb(adres2)
    break
Вроде все работает, как задумано, но текст получает не очень компактный, как это исправить, как его перевести на русский язык ?
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
10.03.2020, 16:05
Ответы с готовыми решениями:

Из строки, содержащей полный адрес веб-страницы, выделить доменное имя сайта
Текст задания: Из строки содержащей полный адрес веб-страницы ( например, http://www.khai.edu/ru/site/facultet.html ), выделить доменное...

Получить название веб-страницы по ссылке
Как получить название веб-страницы по ссылке? Добавлено через 14 часов 53 минуты Раз нет ответов, опишу подробнее)) Для несложного...

Получить скриншот веб-страницы, задав её адрес
Как это можно реализовать попроще ?

2
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
10.03.2020, 16:35
Лучший ответ Сообщение было отмечено Егор Щербанов как решение

Решение

lxml умеет делать абсолютные url-ы из относительных.
Именно ее рекомендуется использовать вместо bs4 (то есть даже не как backend для bs4, а напрямую).
Python
1
2
root = lxml.html.fromstring(some_html_page)
root.make_links_absolute(базовый_url_по_которому_вы_запрашиваете_страничку)
Первая строка парсит документ (полученный после запроса html) в дерево тегов.
Вторая заменяет в этом дереве все относительные ссылки на абсолютные.
Например, если базовый url был "http://localhost/foo/bar.html" , то ссылка baz.html превратится в "http://localhost/foo/baz.html".

Дальше можно по этому дереву делать обычный парсинг с использованием XPATH (bs4 XPATH не поддерживает).

Добавлено через 10 минут
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
>>> from lxml.html import fromstring
>>> import requests
>>> url = 'http://microformats.org/'
>>> content = requests.get(url).text
>>> root = fromstring(content)
>>> root.make_links_absolute(url)
>>> from pprint import pprint
>>> urls = root.xpath('//a[@href]/@href')
>>> pprint(urls[:10])
['http://microformats.org/blog',
 'http://microformats.org/wiki/',
 'http://microformats.org/wiki/irc',
 'http://microformats.org/wiki/about',
 'http://microformats.org/wiki/code-tools',
 'http://microformats.org/wiki/get-started',
 'http://microformats.org/feed',
 'http://microformats.org/2020/03/04/google-confirms-microformats-are-still-a-recommended-metadata-format-for-content',
 'https://www.jvt.me/posts/2020/03/02/google-microformats-support/',
 'https://webmasters.googleblog.com/2020/01/data-vocabulary.html']
>>>
Тогда как без использования make_links_absolute, получаем как есть:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
>>> root = fromstring(content)
>>> urls = root.xpath('//a[@href]/@href')
>>> pprint(urls[:10])
['/blog',
 '/wiki/',
 '/wiki/irc',
 '/wiki/about',
 '/wiki/code-tools',
 '/wiki/get-started',
 'http://microformats.org/feed',
 'http://microformats.org/2020/03/04/google-confirms-microformats-are-still-a-recommended-metadata-format-for-content',
 'https://www.jvt.me/posts/2020/03/02/google-microformats-support/',
 'https://webmasters.googleblog.com/2020/01/data-vocabulary.html']
>>>
1
11 / 10 / 2
Регистрация: 19.02.2018
Сообщений: 393
10.03.2020, 21:03  [ТС]
Garry Galler, спасибо большое Вы мне как всегда очень помогли
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
10.03.2020, 21:03
Помогаю со студенческими работами здесь

Как получить полный адрес по имени поля объекта класса
как получить полный адрес по имени поля объекта класса ? не пересчитывая размер расположенных до него полей от начала объекта

Как получить адрес параметра, передоваемого по ссылке?
подскажите как получить адрес параметра, передоваемого по ссылке? void f(int &a...) { int *p = ????; for(int i = 0; i <...

Как узнать адрес веб-страницы, на которую перенаправили
Здравствуйте. я в браузере захожу на страницу. с этой страницы меня сразу же перенаправляет на другую страницу. и я в адресной строке...

Как раскрыть свернутый <details> по ссылке (или кнопке) с другой веб-страницы
Всем привет! Прошу помощи у коллективного разума :) На странице PAGE-1 имеется свернутый элемент: &lt;details...

Как получить полный код html-страницы
Всем доброго времени суток у меня возник такой вопрос как получить полный код страницы(html). потомучто когда получаешь через...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru