Web scraping 有没有下载Macrotrends.net URL的来源或方法?

Web scraping 有没有下载Macrotrends.net URL的来源或方法?,web-scraping,Web Scraping,我想从中获取数据,我有一个股票符号列表,但macrotrends.net的URL包含一个公司简称和符号。像这样: https://www.macrotrends.net/stocks/charts/GILD/gilead-sciences/balance-sheet 我可以知道在哪里可以找到所有美国股票公司的URL短名称吗?您可以通过首先转到错误的URL来获得真正的基本URL。例如,如果转到,您将看到“未找到页面”。但url将方便地更改为。您可以使用chromedriver获得新的url。下面

我想从中获取数据,我有一个股票符号列表,但macrotrends.net的URL包含一个公司简称和符号。像这样:

https://www.macrotrends.net/stocks/charts/GILD/gilead-sciences/balance-sheet

我可以知道在哪里可以找到所有美国股票公司的URL短名称吗?

您可以通过首先转到错误的URL来获得真正的基本URL。例如,如果转到,您将看到“未找到页面”。但url将方便地更改为。您可以使用chromedriver获得新的url。下面是一个简短的脚本,它将遍历给定列表中的每个符号,并将真实的基本url写入文本文件:

import sys, os
import time
from selenium import webdriver


def getDriver():
    options = webdriver.ChromeOptions()
    prefs = {}
    prefs['profile.default_content_settings.popups'] = 0
    options.add_experimental_option('prefs', prefs)
    options.add_experimental_option("excludeSwitches", ['enable-automation'])
    options.add_experimental_option('useAutomationExtension', False)
    options.add_argument('--no-sandbox')
    options.add_argument('--disable-setuid-sandbox')
    options.add_argument('--start-maximized')
    options.add_argument('--ignore-ssl-errors=yes')
    options.add_argument('--ignore-certificate-errors')
    options.add_argument('--headless')
    user_agent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.53 Safari/537.36'
    options.add_argument(f'user-agent={user_agent}')
    return webdriver.Chrome('./driver/chromedriver.exe', options=options)


def main(write_mode):
    print('')

    if write_mode != 'w' and write_mode != 'a':
        return 1

    driver = getDriver()
    with open('symbols_all.txt', 'r') as symbols_file, \
        open('macrotrends_map.txt', write_mode) as map_file:
        for line in symbols_file.readlines():
            symbol = line.replace('\n', '').split(',')[0]
            if symbol > '':
                while True:
                    try:
                        url = f'https://www.macrotrends.net/stocks/charts/{symbol}'
                        driver.get(url)
                        time.sleep(2)
                        base_url = driver.current_url if driver.current_url != url else 'ERROR'
                        map_file.write(symbol + ',' + base_url + '\n')
                        map_file.flush()
                        print(symbol + ',' + base_url)
                        break
                        
                    except: # in case internet goes out
                        print('...')
                        time.sleep(15)

    print('\nSuccess!\n')
    return 1
    

if __name__ == '__main__':
    os._exit(main(sys.argv[1]))