从锚点中提取href属性url

问题描述 投票:0回答:3

我无法从页面中提取锚点的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'

你能帮助我更好地理解如何提取它们吗?提前致谢。

编辑:

完整代码:

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()
python web-scraping beautifulsoup python-requests
3个回答
0
投票

按照你的代码,你应该试试这个:

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

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

0
投票

作为美丽的汤文档日:

如果find()找不到任何内容,则返回None

这意味着,你的soup.find('table')无法找到。


0
投票

我会使用更简洁的列表理解,其中使用带有^运算符的开头的attribute = value选择器

links = [link['href'] for link in soup.select("a[href^='http:']")]
© www.soinside.com 2019 - 2024. All rights reserved.