Web Scraping

with

Kartik

kartik@brown.edu

Outline

Webpages

Canvas of the Internet

  • HTML
  • Hyperlinks
<!DOCTYPE html>
<html>
  <head>
    <title>This is a title</title>
  </head>
  <body>
    <p>Hello world!</p>
    <p>
      <a href="https://www.wikipedia.org/">A link to Wikipedia!</a>
    </p>
  </body>
</html>

Why Scrape the Web?

Document Object Model
The DOM

© Wikipedia

© Douglas Crockford

© Douglas Crockford

© Douglas Crockford

Python

  • Easy to learn, almost English like
  • Great for quick experiments
  • Awesome documentation, community
  • Huge collection of modules (libraries):
    • Requests
    • BeautifulSoup

Analyzing Webpages

  • Tags <…>

  • #id

  • .class

  • text

Code Demo

https://github.com/k4rtik/fetch-topicals

Output Formats

JSON

{
    "1976": {
        "0": {
            "alt": "Use your head!",
            "caption": "When helmets were made compulsory in Bombay",
            "url": "http://www.amul.com/files/hits/amul-hits-1251.gif"
        },
        "1": {
            "alt": "The Big Payoff",
            "caption": "The Big Payoff",
            "url": "http://www.amul.com/files/hits/amul-hits-1250.gif"
        }
    },
    "1986": {
        "0": {
            "alt": "Wahi hota hai jo Manzure Ilahi hota hai.",
            "caption": "The Pakistani cricketer Mansur Ilahi in great form.",
            "url": "http://www.amul.com/files/hits/amul-hits-1145.jpg"
        },
        "1": {
            "alt": "In all Holmes Amul's elementary, my dear.",
            "caption": "During the time when a film on Shrelock Holms was being screened.",
            "url": "http://www.amul.com/files/hits/amul-hits-1144.jpg"
        }
    }
}
# in Python
import json

Others

  • CSV
  • Text
  • Your own format

Challenges

  • Dealing with bad markup on webpages
  • JavaScript driven content
  • Webpages needing Login

 

But there is sometimes hope: APIs!

Other Tutorials/Resources

  • https://first-web-scraper.readthedocs.org/en/latest/
    Covers basics of command line, Python and uses CSV module
  • https://github.com/ThaWeatherman/scrapers/
    Collection of scrapers for sites like craigslist, reddit, etc.
  • Lots of other resources, Google is your friend!

Web Scraping with Python

By Kartik Singhal

Web Scraping with Python

Workshop given to participants of Citizen + Virtual at Brown Design Workshop on Jan 16, 2016

  • 2,729