Je ne peux pas extraire l'attribut href des ancrages de la page .. J'ai essayé d'utiliser RE Bibliothèque: 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()
3 Réponses :
Alors que de belles documentations de soupe indiquent: p>
Si vous trouvez () Vous ne trouvez rien, il ne renvoie aucun p> blockQuote>
Cela signifie que votre
Soupe.Find ('Table') code> est introuvable. P>
Jetez un coup d'œil sur le code complet ajouté récemment, soupe.find ('Table') code> trouve la table de la page.
J'ai essayé votre code sur mon PC et comme je l'ai dit avant Soupe.Find ('Table') CODE> n'est pas.
Imprimer ("Type:% S" Type de% (TABLE_ROWS)) CODE> Retours
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]
Pourriez-vous fournir la liste des liens que vous obtenez de pour lien dans SOUP.Findall ('a', attrsix = {'href': re.comple ("^ http: //")}): code> ligne?
Donc, ['http://www.maryland.gov/', 'http://www.youtube.com/playlist?list=plaf971858A68E4949', ..., ...] code> a Le problème a été réparé parce que ma table avait type
Aucun code> mais maintenant une autre erreur d'erreur appelante:
indices de chaîne doit être entiers code> ici ici
URL = Nom + '/' + lien [' href '] code>
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 i>.
D'accord, j'ai oublié de définir quel a code> est sélectionné. Maintenant tout fonctionne bien avec votre code et il suffit sans utiliser Re. Merci de votre aide.
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:']")]
Déterminez pourquoi
soupe code> est
Aucun code> d'abord.
Soup Code> n'est pas
Aucun code>, il a stocké le contenu de la page analysée.
soupe.find ('Table') code> est
Aucun code>, veuillez coller tout votre code ici
Le code complet a été ajouté.