Извлечение URL-адреса атрибута href из якоря - PullRequest
0 голосов
/ 02 апреля 2019

Я не могу извлечь атрибут href якорей со страницы .. Я попытался использовать библиотеку re:

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

Но это не работает, я получаю сообщение об ошибке:

table_rows = soup.find('table').find_all('tr')[1:]
AttributeError: 'NoneType' object has no attribute 'find_all'

Можете ли вы помочь мне лучше понять, как именно их извлечь? Заранее спасибо.

Edit:

Полный код:

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 ]

0 голосов
/ 02 апреля 2019

Следуя вашему коду, вы должны попробовать это:

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

links = [i["href"] for i in tag]
0 голосов
/ 02 апреля 2019

Я бы пошел с более кратким пониманием списка, где вы используете селектор атрибута = значение, начинающийся с оператора ^

links = [link['href'] for link in soup.select("a[href^='http:']")]
0 голосов
/ 02 апреля 2019

Как сказано в документации Beautiful Soup:

Если find () не может ничего найти, возвращается None

Это означает, что ваш soup.find('table') не может быть найден.

...