Web scraping and Searching for Investment Opportunities

Posted on Mar 26, 2021



I had been reading The Intelligent Investor by Benjamin Graham and wanted to perform some value investing/fundamental analysis research, so this motivation fit perfectly with a project that required web scraping and pandas data manipulation and analysis.  


Given the limited amount of time for this project, the primary goal was to use the principles of value investing to generate a shortlist of stocks that could then warrant deeper research for potential long-term investment.

The Scrape

I chose to scrape Yahoo Finance because it is a rich source of useful information ranging from trading data, financials, analyst estimates, sustainability information, and corporate governance.  All the data for a given company/ticker is organized into different sections of the website: Summary, Statistics, Profile, Financials, Analysis, etc. 

Example of some of scraped data in the red box


I primarily used Scrapy, a fast and powerful scraping and web-crawling framework, to gather most of the desired data.  I also used Selenium, an automated browser-based scraper, because some data was presented in javascript tables and could not be retrieved using scrapy (image below).

Had to use Selenium for this data

The Data

Note: all data is as of 2/11/21

With value and defensive investing as the theme, I chose to restrict the analysis to the S&P 500, the largest 500 companies in the United States, due to the reliability of the financial data, the stability of the companies, and the depth of the analyst coverage.  The data that I primarily used for my analysis fell into three broad categories:

  • Stock price-related information: PE ratio, dividends, beta, etc.
  • Financials: ROE, ROA, profit margin, current ratio, etc.
  • Governance Scores and Sustainability scores (from Institutional Shareholder Services and Sustainalytics)


After a good amount of data wrangling, cleaning and aggregation, I had a feature-rich pandas dataframe in hand and was ready to perform the research. I approached the stock search from two perspectives: bottom-up and top-down:

Bottom-up: the goal of this type of search was to find top contenders along the following categories and then find the companies that showed up in the top quantiles of multiple groups through cross referencing.  The categories were as follows:

  • Operating figures: current ratio, operating margin, profit margin, ROA, ROE, etc.
  • Reasonable market valuations: PE, PEG, Price-to-sales, Price-to-revenues, EV-to-Rev, EV-to-EBITDA, etc.
  • Governance scores (ESG and ISS)
  • Good dividends
  • Consensus 1-year Analyst Estimates for 2021

Top-down: this first step in the approach was to determine which sectors were most attractive and then apply the above-mentioned bottom-up categories to screen for specific stocks.

Bottom-up Findings

Companies with good ‘Operating Figures.’  The stocks that look most attractive are boxed in red:

Selected companies based on ‘reasonable market valuations’

Governance Scores

While not part of the investment theme, the data was there, so I also decided to explore companies that looked like they could be good to short.  This category was based on ‘short’ market data and bearish 1yr analyst estimates.

Top-Down Findings:

Using different metrics to evaluate the various sectors in the S&P 500, the sector that looked to best option was the Utilities sector

A screen of the Utilites sector using the bottom-up approach yielded the following companies:

Final Thoughts

I was a little surprised to find that Utilites was the sector that stuck out when reviewing the data.  While typically passed over because of limited growth potential, they might be a good addition to one's portfolio at this point in time (writing as of Feb 2021) especially if you believe that the market is overvalued and due for a correction.

Are we due for a correction?


Overall this project was a tremendous learning experience for me.  I came away with much deeper experience in web scraping and data wrangling and analysis in pandas.  I also came away from this project with a list of stocks that I ordinarily would not have considered.  I look forward to the next step which is to perform much deeper research and financial statement analysis to see if any of them are undervalued companies/worthy investments.  First step completed!  The search continues...

About Author

Eugene Ng

Aspiring data scientist
View all posts by Eugene Ng >

Leave a Comment

No comments found.

View Posts by Categories

Our Recent Popular Posts

View Posts by Tags

#python #trainwithnycdsa 2019 airbnb Alex Baransky alumni Alumni Interview Alumni Reviews Alumni Spotlight alumni story Alumnus API Application artist aws beautiful soup Best Bootcamp Best Data Science 2019 Best Data Science Bootcamp Best Data Science Bootcamp 2020 Best Ranked Big Data Book Launch Book-Signing bootcamp Bootcamp Alumni Bootcamp Prep Bundles California Cancer Research capstone Career Career Day citibike clustering Coding Course Demo Course Report D3.js data Data Analyst data science Data Science Academy Data Science Bootcamp Data science jobs Data Science Reviews Data Scientist Data Scientist Jobs data visualization Deep Learning Demo Day Discount dplyr employer networking feature engineering Finance Financial Data Science Flask gbm Get Hired ggplot2 googleVis Hadoop higgs boson Hiring hiring partner events Hiring Partners Industry Experts Instructor Blog Instructor Interview Job Job Placement Jobs Jon Krohn JP Morgan Chase Kaggle Kickstarter lasso regression Lead Data Scienctist Lead Data Scientist leaflet linear regression Logistic Regression machine learning Maps matplotlib Medical Research Meet the team meetup Networking neural network Neural networks New Courses nlp NYC NYC Data Science nyc data science academy NYC Open Data NYCDSA NYCDSA Alumni Online Online Bootcamp Online Training Open Data painter pandas Part-time Portfolio Development prediction Prework Programming PwC python Python Data Analysis python machine learning python scrapy python web scraping python webscraping Python Workshop R R language R Programming R Shiny r studio R Visualization R Workshop R-bloggers random forest Ranking recommendation recommendation system regression Remote remote data science bootcamp Scrapy scrapy visualization seaborn Selenium sentiment analysis Shiny Shiny Dashboard Spark Special Special Summer Sports statistics streaming Student Interview Student Showcase SVM Switchup Tableau team TensorFlow Testimonial tf-idf Top Data Science Bootcamp twitter visualization web scraping Weekend Course What to expect word cloud word2vec XGBoost yelp