Экспорт данных из HTML в Excel - PullRequest
0 голосов
/ 22 октября 2019

Я только начал программировать. У меня есть задача извлечь данные из HTML-страницы в Excel. Использование Python 3.7. Моя проблема в том, что у меня есть веб-сайт, с большим количеством ссылок внутри. За этими URL снова больше URL. Мне нужны данные за третий URL. Моей первой проблемой было бы, как я могу диктовать программе выбирать только определенные ссылки из ul, а не из каждой ul на странице?

from bs4 import BeautifulSoup
import urllib
import requests
import re

page = urllib.request.urlopen("file").read()

soup = BeautifulSoup(page, "html.parser")

print (soup.prettify ())

for link in soup.find_all("a", href=re.compile("katalog_")):
links= link.get("href")
if "katalog" in links:
    for link in soup.find_all("a", href=re.compile("alle_")):
        links = link.get("href")       

print (soup.get_text ())

1 Ответ

0 голосов
/ 22 октября 2019

Есть много способов, один из них - использовать «find_all» и пытаться быть точным в отношении таких тегов, как «a», как вы это и сделали. Если это единственная опция, используйте регулярное выражение для вывода. Вы можете обратиться к этой теме: Python BeautifulSoup Извлечение определенных URL . Также, пожалуйста, покажите нам либо ссылку, либо html структуру ссылок, которые вы хотите извлечь. Мы хотели бы видеть различия между URL-адресами.

PS: Извините, я не могу комментировать из-за <50 репутации, или я бы хотел. </p>

Обновленный ответ, основанный на понимании:

from bs4 import BeautifulSoup
import urllib
import requests

page = urllib.request.urlopen("https://www.bsi.bund.de/DE/Themen/ITGrundschutz/ITGrundschutzKompendium/itgrundschutzKompendium_node.html").read()
soup = BeautifulSoup(page, "html.parser")

for firstlink in soup.find_all("a",{"class":"RichTextIntLink NavNode"}):
    firstlinks = firstlink.get("href")
    if "bausteine" in firstlinks:
        bausteinelinks = "https://www.bsi.bund.de/" + str(firstlinks.split(';')[0])
        response = urllib.request.urlopen(bausteinelinks).read()
        soup = BeautifulSoup(response, 'html.parser')
        secondlink = "https://www.bsi.bund.de/" + str(((soup.find("a",{"class":"RichTextIntLink Basepage"})["href"]).split(';'))[0])
        res = urllib.request.urlopen(secondlink).read()
        soup = BeautifulSoup(res, 'html.parser')
        listoftext = soup.find_all("div",{"id":"content"})
        for text in listoftext:
            print (text.text)
...