Web scraping 有没有下载Macrotrends.net URL的来源或方法?
我想从中获取数据,我有一个股票符号列表,但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。下面
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]))