0
votes

Extraire l'URL d'attribut href de l'ancre

Je ne peux pas extraire l'attribut href des ancrages de la page .. J'ai essayé d'utiliser RE Bibliothèque: xxx pré>

mais cela ne fonctionne pas, je reçois l'erreur: p>

import requests
from bs4 import BeautifulSoup
import re

DOMAIN_NAME = "https://www.dllr.state.md.us/employment"
BASE_URL = DOMAIN_NAME + '/warn2010.shtml'

def parse_url(url):
    html_source = requests.get(url, verify=False).text
    soup = BeautifulSoup(html_source, 'html.parser')

    data = []

    table_rows = soup.find('table').find_all('tr')[1:]
    for table_row in table_rows:
        table_data = table_row.find_all('td')
        data.append({
            'notice_date': table_data[0].text,
            'naics_code': table_data[1].text,
            'company': table_data[2].text,
            'location': table_data[3].text,
            'wia_code': table_data[4].text,
            'total_employees': table_data[5].text,
            'effective_date': table_data[6].text,
            'type_code': table_data[7].text
        })

    return data

def run_ingestion():
    html_source = requests.get(BASE_URL, verify=False).text
    soup = BeautifulSoup(html_source, 'html.parser')

    for link in soup.findAll('a', attrs={'href': re.compile("^http://")}):
        print(link.get('href'))

        url = DOMAIN_NAME + '/' + link.get('href')

        data = parse_url(url)

        for row in data:
            print(row)

if __name__ == '__main__':
    run_ingestion()


4 commentaires

Déterminez pourquoi soupe est Aucun d'abord.


Soup n'est pas Aucun , il a stocké le contenu de la page analysée.


soupe.find ('Table') est Aucun , veuillez coller tout votre code ici


Le code complet a été ajouté.


3 Réponses :


0
votes

Alors que de belles documentations de soupe indiquent:

Si vous trouvez () Vous ne trouvez rien, il ne renvoie aucun

Cela signifie que votre Soupe.Find ('Table') est introuvable.


2 commentaires

Jetez un coup d'œil sur le code complet ajouté récemment, soupe.find ('Table') trouve la table de la page.


J'ai essayé votre code sur mon PC et comme je l'ai dit avant Soupe.Find ('Table') n'est pas. Imprimer ("Type:% S" Type de% (TABLE_ROWS)) Retours



0
votes

Suivre votre code, vous devriez essayer ceci:

soup = BeautifulSoup(html_source, 'html.parser')
tag = soup.findAll('a', attrs={'href': re.compile("^http://")})

links = [i["href"] for i in tag]


4 commentaires

Pourriez-vous fournir la liste des liens que vous obtenez de pour lien dans SOUP.Findall ('a', attrsix = {'href': re.comple ("^ http: //")}): ligne?


Donc, ['http://www.maryland.gov/', 'http://www.youtube.com/playlist?list=plaf971858A68E4949', ..., ...] a Le problème a été réparé parce que ma table avait type Aucun mais maintenant une autre erreur d'erreur appelante: indices de chaîne doit être entiers ici ici URL = Nom + '/' + lien [' href ']


Selon votre code, à l'intérieur de la boucle pour la boucle, après la construction de l'URL (dans le premier cas, dllr.state.md.us/employment/http://www.maryland.gov ), vous essayez de gratter cette URL. Malheureusement, l'URL spécifiée ne peut pas être trouvée .


D'accord, j'ai oublié de définir quel a est sélectionné. Maintenant tout fonctionne bien avec votre code et il suffit sans utiliser Re. Merci de votre aide.



0
votes

J'irais avec une compréhension de liste plus succincte où vous utilisez un attribut = sélecteur de valeur avec Déming avec ^ opérateur

links = [link['href'] for link in soup.select("a[href^='http:']")]


0 commentaires