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> estAucun code> d'abord.Soup Code> n'est pasAucun code>, il a stocké le contenu de la page analysée.soupe.find ('Table') code> estAucun code>, veuillez coller tout votre code iciLe code complet a été ajouté.