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

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

10.03.2020, 16:05. Показов 2560. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
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 считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru