从锚点提取href属性网址

时间:2019-04-01 21:34:39

标签: python web-scraping beautifulsoup python-requests

我无法从页面提取锚的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()

3 个答案:

答案 0 :(得分:0)

正如《美丽汤》文档所说:

  

如果find()找不到任何东西,则返回None

这意味着找不到您的HaHaHaHaHaHa

答案 1 :(得分:0)

在执行代码之后,您应该尝试以下操作:

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

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

答案 2 :(得分:0)

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

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