Выдернуть ссылки из html кода веб-страницы

Наги

Пользователь
Пользователь
Окт 25, 2020
75
5
8
Всем добрый день.
Я совсем новичок, так что не судите строго( У меня есть задача вытащить некоторые данные из веб-страниц и я сейчас пытаюсь написать скрипт, который на эти страницы хотя бы заходил. Начала с выборки адресов страниц. Смогла сделать выборку нужных страниц со ссылками на них, но теперь мне нужно оставить только ссылки, чтобы затем скрипт по ним по списку заходил. И вот это не получается(
Код пробую такой:
Python:
from bs4 import BeautifulSoup
import requests
import re
import csv


resp = requests.get('https://gcn.gsfc.nasa.gov/gcn3_archive.html')
soup = BeautifulSoup(resp.text, 'lxml')
lst_li = soup.find_all(lambda tag:tag.name=='li' and ("Konus-Wind detection" in tag.text or "Konus-Wind observation" in tag.text))
for href in lst_li:
link=href.get('href',None)
if link is not None:
        print(link)
Но начиная с 'for..' судя по всему какая-то ошибка. Помогите, пожалуйста, разобраться, как из полученного списка ссылок + страниц оставить только ссылки.
Использую Python 3.9.0 и windows 10.
Заранее спасибо!
 
Последнее редактирование:

stud_55

Модератор
Команда форума
Модератор
Апр 3, 2020
1 522
672
113
Вот пример:
Python:
from bs4 import BeautifulSoup
import requests
import re
import csv


resp = requests.get('https://gcn.gsfc.nasa.gov/gcn3_archive.html')
soup = BeautifulSoup(resp.text, 'lxml')
lst_li = soup.find_all(lambda tag: tag.name == 'li' and ("Konus-Wind detection" in tag.text or "Konus-Wind observation" in tag.text))

for li in lst_li:
    a = li.find('a')
    print(a)
    print(a.attrs['href'] if a != -1 else '')
 

Наги

Пользователь
Пользователь
Окт 25, 2020
75
5
8
Вот пример:
Python:
from bs4 import BeautifulSoup
import requests
import re
import csv


resp = requests.get('https://gcn.gsfc.nasa.gov/gcn3_archive.html')
soup = BeautifulSoup(resp.text, 'lxml')
lst_li = soup.find_all(lambda tag: tag.name == 'li' and ("Konus-Wind detection" in tag.text or "Konus-Wind observation" in tag.text))

for li in lst_li:
    a = li.find('a')
    print(a)
    print(a.attrs['href'] if a != -1 else '')
Спасибо Вам огромное!
Могу ли следом еще вопрос задать?
Имея список этих ссылок, мне нужно составить из них полные ссылки. Я пытаюсь это сделать таким образом:

Python:
base_url = "https://gcn.gsfc.nasa.gov/"
url_gen = base_url + ???
print(url_gen)
Где вместо ??? нужно последовательно поставить все полученные ссылки, чтобы получился список ссылок вида: "https://gcn.gsfc.nasa.gov/gcn3/28774.gcn3
https://gcn.gsfc.nasa.gov/gcn3/28769.gcn3" и т.д.
Я думала подставить вместо ??? название переменной, отвечающей за генерацию списка коротких ссылок. Но предложенный Вами код построен иначе и не совсем понимаю, как быть в таком случае(
 

regnor

Модератор
Команда форума
Модератор
Июл 7, 2020
2 625
469
83
Python:
base_url = "https://gcn.gsfc.nasa.gov/"
for li in lst_li:
    a = li.find('a')
    print(base_url + a.attrs['href'] if a != -1 else '')
 

Наги

Пользователь
Пользователь
Окт 25, 2020
75
5
8
Python:
base_url = "https://gcn.gsfc.nasa.gov/"
for li in lst_li:
    a = li.find('a')
    print(base_url + a.attrs['href'] if a != -1 else '')
Огромное спасибо!
 

Форум IT Специалистов