Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Intro to BS4

Intro to BS4

Python CodeLabs - Python bs4 - Introduction to BeautifulSoup
http://eueung.github.io/python/bs4

Eueung Mulyana

December 06, 2015
Tweet

More Decks by Eueung Mulyana

Other Decks in Programming

Transcript

  1.  Python - BeautifulSoup bs4
    Eueung Mulyana
    http://eueung.github.io/python/bs4
    Python CodeLabs | Attribution-ShareAlike CC BY-SA
    1 / 20

    View full-size slide

  2. Agenda
    bs4 Basics
    Easy Web Scraping
    2 / 20

    View full-size slide

  3.  Basics
    3 / 20

    View full-size slide

  4. Example #1
    h
    t
    m
    l
    _
    d
    o
    c = "
    "
    "
    <
    h
    t
    m
    l
    >
    <
    h
    e
    a
    d
    >
    <
    t
    i
    t
    l
    e
    >
    T
    h
    e D
    o
    r
    m
    o
    u
    s
    e
    '
    s s
    t
    o
    r
    y
    <
    /
    t
    i
    t
    l
    e
    >
    <
    /
    h
    e
    a
    d
    >
    <
    b
    o
    d
    y
    >
    <
    p c
    l
    a
    s
    s
    =
    "
    t
    i
    t
    l
    e
    "
    >
    <
    b
    >
    T
    h
    e D
    o
    r
    m
    o
    u
    s
    e
    '
    s s
    t
    o
    r
    y
    <
    /
    b
    >
    <
    /
    p
    >
    <
    p c
    l
    a
    s
    s
    =
    "
    s
    t
    o
    r
    y
    "
    >
    O
    n
    c
    e u
    p
    o
    n a t
    i
    m
    e t
    h
    e
    r
    e w
    e
    r
    e t
    h
    r
    e
    e l
    i
    t
    t
    l
    e s
    i
    s
    t
    e
    r
    s
    ; a
    n
    d t
    h
    e
    i
    r n
    a
    m
    e
    s w
    e
    r
    e
    <
    a h
    r
    e
    f
    =
    "
    h
    t
    t
    p
    :
    /
    /
    e
    x
    a
    m
    p
    l
    e
    .
    c
    o
    m
    /
    e
    l
    s
    i
    e
    " c
    l
    a
    s
    s
    =
    "
    s
    i
    s
    t
    e
    r
    " i
    d
    =
    "
    l
    i
    n
    k
    1
    "
    >
    E
    l
    s
    i
    e
    <
    /
    a
    >
    ,
    <
    a h
    r
    e
    f
    =
    "
    h
    t
    t
    p
    :
    /
    /
    e
    x
    a
    m
    p
    l
    e
    .
    c
    o
    m
    /
    l
    a
    c
    i
    e
    " c
    l
    a
    s
    s
    =
    "
    s
    i
    s
    t
    e
    r
    " i
    d
    =
    "
    l
    i
    n
    k
    2
    "
    >
    L
    a
    c
    i
    e
    <
    /
    a
    > a
    n
    d
    <
    a h
    r
    e
    f
    =
    "
    h
    t
    t
    p
    :
    /
    /
    e
    x
    a
    m
    p
    l
    e
    .
    c
    o
    m
    /
    t
    i
    l
    l
    i
    e
    " c
    l
    a
    s
    s
    =
    "
    s
    i
    s
    t
    e
    r
    " i
    d
    =
    "
    l
    i
    n
    k
    3
    "
    >
    T
    i
    l
    l
    i
    e
    <
    /
    a
    >
    ;
    a
    n
    d t
    h
    e
    y l
    i
    v
    e
    d a
    t t
    h
    e b
    o
    t
    t
    o
    m o
    f a w
    e
    l
    l
    .
    <
    /
    p
    >
    <
    p c
    l
    a
    s
    s
    =
    "
    s
    t
    o
    r
    y
    "
    >
    .
    .
    .
    <
    /
    p
    >
    "
    "
    "
    f
    r
    o
    m b
    s
    4 i
    m
    p
    o
    r
    t B
    e
    a
    u
    t
    i
    f
    u
    l
    S
    o
    u
    p
    s
    o
    u
    p = B
    e
    a
    u
    t
    i
    f
    u
    l
    S
    o
    u
    p
    (
    h
    t
    m
    l
    _
    d
    o
    c
    , '
    h
    t
    m
    l
    .
    p
    a
    r
    s
    e
    r
    '
    )
    p
    r
    i
    n
    t
    (
    s
    o
    u
    p
    .
    p
    r
    e
    t
    t
    i
    f
    y
    (
    )
    )
    <
    h
    t
    m
    l
    >
    <
    h
    e
    a
    d
    >
    <
    t
    i
    t
    l
    e
    >
    T
    h
    e D
    o
    r
    m
    o
    u
    s
    e
    '
    s s
    t
    o
    r
    y
    <
    /
    t
    i
    t
    l
    e
    >
    <
    /
    h
    e
    a
    d
    >
    <
    b
    o
    d
    y
    >
    <
    p c
    l
    a
    s
    s
    =
    "
    t
    i
    t
    l
    e
    "
    >
    <
    b
    >
    T
    h
    e D
    o
    r
    m
    o
    u
    s
    e
    '
    s s
    t
    o
    r
    y
    <
    /
    b
    >
    <
    /
    p
    >
    <
    p c
    l
    a
    s
    s
    =
    "
    s
    t
    o
    r
    y
    "
    >
    O
    n
    c
    e u
    p
    o
    n a t
    i
    m
    e t
    h
    e
    r
    e w
    e
    r
    e t
    h
    r
    e
    e l
    i
    t
    t
    l
    e s
    i
    s
    t
    e
    r
    s
    ; a
    n
    d t
    h
    e
    i
    r
    <
    a c
    l
    a
    s
    s
    =
    "
    s
    i
    s
    t
    e
    r
    " h
    r
    e
    f
    =
    "
    h
    t
    t
    p
    :
    /
    /
    e
    x
    a
    m
    p
    l
    e
    .
    c
    o
    m
    /
    e
    l
    s
    i
    e
    " i
    d
    =
    "
    l
    i
    n
    k
    1
    <
    a c
    l
    a
    s
    s
    =
    "
    s
    i
    s
    t
    e
    r
    " h
    r
    e
    f
    =
    "
    h
    t
    t
    p
    :
    /
    /
    e
    x
    a
    m
    p
    l
    e
    .
    c
    o
    m
    /
    l
    a
    c
    i
    e
    " i
    d
    =
    "
    l
    i
    n
    k
    2
    <
    a c
    l
    a
    s
    s
    =
    "
    s
    i
    s
    t
    e
    r
    " h
    r
    e
    f
    =
    "
    h
    t
    t
    p
    :
    /
    /
    e
    x
    a
    m
    p
    l
    e
    .
    c
    o
    m
    /
    t
    i
    l
    l
    i
    e
    " i
    d
    =
    "
    l
    i
    n
    k
    a
    n
    d t
    h
    e
    y l
    i
    v
    e
    d a
    t t
    h
    e b
    o
    t
    t
    o
    m o
    f a w
    e
    l
    l
    .
    <
    /
    p
    >
    <
    p c
    l
    a
    s
    s
    =
    "
    s
    t
    o
    r
    y
    "
    > .
    .
    . <
    /
    p
    >
    <
    /
    b
    o
    d
    y
    >
    <
    /
    h
    t
    m
    l
    >
    4 / 20

    View full-size slide

  5. Example #2
    f
    o
    r l
    i
    n
    k i
    n s
    o
    u
    p
    .
    f
    i
    n
    d
    _
    a
    l
    l
    (
    '
    a
    '
    )
    :
    p
    r
    i
    n
    t
    (
    l
    i
    n
    k
    .
    g
    e
    t
    (
    '
    h
    r
    e
    f
    '
    )
    )
    p
    r
    i
    n
    t
    (
    s
    o
    u
    p
    .
    g
    e
    t
    _
    t
    e
    x
    t
    (
    )
    )
    p
    r
    i
    n
    t s
    o
    u
    p
    .
    t
    i
    t
    l
    e # <
    t
    i
    t
    l
    e
    >
    T
    h
    e D
    o
    r
    m
    o
    u
    s
    e
    '
    s s
    t
    o
    r
    y
    <
    /
    t
    i
    t
    l
    e
    >
    p
    r
    i
    n
    t s
    o
    u
    p
    .
    t
    i
    t
    l
    e
    .
    n
    a
    m
    e # u
    '
    t
    i
    t
    l
    e
    '
    p
    r
    i
    n
    t s
    o
    u
    p
    .
    t
    i
    t
    l
    e
    .
    s
    t
    r
    i
    n
    g # u
    '
    T
    h
    e D
    o
    r
    m
    o
    u
    s
    e
    '
    s s
    t
    o
    r
    y
    '
    p
    r
    i
    n
    t s
    o
    u
    p
    .
    t
    i
    t
    l
    e
    .
    p
    a
    r
    e
    n
    t
    .
    n
    a
    m
    e # u
    '
    h
    e
    a
    d
    '
    p
    r
    i
    n
    t s
    o
    u
    p
    .
    p # <
    p c
    l
    a
    s
    s
    =
    "
    t
    i
    t
    l
    e
    "
    >
    <
    b
    >
    T
    h
    e D
    o
    r
    m
    o
    u
    s
    e
    '
    s s
    t
    o
    r
    y
    <
    /
    b
    >
    <
    /
    p
    >
    p
    r
    i
    n
    t s
    o
    u
    p
    .
    p
    [
    '
    c
    l
    a
    s
    s
    '
    ] # u
    '
    t
    i
    t
    l
    e
    '
    p
    r
    i
    n
    t s
    o
    u
    p
    .
    a # <
    a c
    l
    a
    s
    s
    =
    "
    s
    i
    s
    t
    e
    r
    " h
    r
    e
    f
    =
    "
    h
    t
    t
    p
    :
    /
    /
    e
    x
    a
    m
    p
    l
    e
    .
    c
    o
    m
    /
    e
    l
    s
    i
    e
    " i
    d
    =
    "
    l
    i
    n
    k
    1
    "
    >
    E
    l
    s
    i
    e
    <
    /
    a
    >
    p
    r
    i
    n
    t s
    o
    u
    p
    .
    f
    i
    n
    d
    (
    i
    d
    =
    "
    l
    i
    n
    k
    3
    "
    ) # <
    a c
    l
    a
    s
    s
    =
    "
    s
    i
    s
    t
    e
    r
    " h
    r
    e
    f
    =
    "
    h
    t
    t
    p
    :
    /
    /
    e
    x
    a
    m
    p
    l
    e
    .
    c
    o
    m
    /
    t
    i
    l
    l
    i
    e
    " i
    d
    =
    "
    l
    i
    n
    k
    3
    "
    >
    T
    i
    l
    l
    i
    e
    <
    /
    a
    >
    p
    r
    i
    n
    t s
    o
    u
    p
    .
    f
    i
    n
    d
    _
    a
    l
    l
    (
    '
    a
    '
    ) # [
    <
    a c
    l
    a
    s
    s
    =
    "
    s
    i
    s
    t
    e
    r
    " h
    r
    e
    f
    =
    "
    h
    t
    t
    p
    :
    /
    /
    e
    x
    a
    m
    p
    l
    e
    .
    c
    o
    m
    /
    e
    l
    s
    i
    e
    " i
    d
    =
    "
    l
    i
    n
    k
    1
    "
    >
    E
    l
    s
    i
    e
    <
    /
    a
    >
    ,
    # <
    a c
    l
    a
    s
    s
    =
    "
    s
    i
    s
    t
    e
    r
    " h
    r
    e
    f
    =
    "
    h
    t
    t
    p
    :
    /
    /
    e
    x
    a
    m
    p
    l
    e
    .
    c
    o
    m
    /
    l
    a
    c
    i
    e
    " i
    d
    =
    "
    l
    i
    n
    k
    2
    "
    >
    L
    a
    c
    i
    e
    <
    /
    a
    >
    ,
    # <
    a c
    l
    a
    s
    s
    =
    "
    s
    i
    s
    t
    e
    r
    " h
    r
    e
    f
    =
    "
    h
    t
    t
    p
    :
    /
    /
    e
    x
    a
    m
    p
    l
    e
    .
    c
    o
    m
    /
    t
    i
    l
    l
    i
    e
    " i
    d
    =
    "
    l
    i
    n
    k
    3
    "
    >
    T
    i
    l
    l
    i
    e
    <
    /
    a
    >
    ]
    <
    t
    i
    t
    l
    e
    >
    T
    h
    e D
    o
    r
    m
    o
    u
    s
    e
    '
    s s
    t
    o
    r
    y
    <
    /
    t
    i
    t
    l
    e
    >
    t
    i
    t
    l
    e
    T
    h
    e D
    o
    r
    m
    o
    u
    s
    e
    '
    s s
    t
    o
    r
    y
    h
    e
    a
    d
    <
    p c
    l
    a
    s
    s
    =
    "
    t
    i
    t
    l
    e
    "
    >
    <
    b
    >
    T
    h
    e D
    o
    r
    m
    o
    u
    s
    e
    '
    s s
    t
    o
    r
    y
    <
    /
    b
    >
    <
    /
    p
    >
    [
    u
    '
    t
    i
    t
    l
    e
    '
    ]
    <
    a c
    l
    a
    s
    s
    =
    "
    s
    i
    s
    t
    e
    r
    " h
    r
    e
    f
    =
    "
    h
    t
    t
    p
    :
    /
    /
    e
    x
    a
    m
    p
    l
    e
    .
    c
    o
    m
    /
    e
    l
    s
    i
    e
    " i
    d
    =
    "
    l
    i
    n
    k
    1
    "
    <
    a c
    l
    a
    s
    s
    =
    "
    s
    i
    s
    t
    e
    r
    " h
    r
    e
    f
    =
    "
    h
    t
    t
    p
    :
    /
    /
    e
    x
    a
    m
    p
    l
    e
    .
    c
    o
    m
    /
    t
    i
    l
    l
    i
    e
    " i
    d
    =
    "
    l
    i
    n
    k
    3
    "
    [
    <
    a c
    l
    a
    s
    s
    =
    "
    s
    i
    s
    t
    e
    r
    " h
    r
    e
    f
    =
    "
    h
    t
    t
    p
    :
    /
    /
    e
    x
    a
    m
    p
    l
    e
    .
    c
    o
    m
    /
    e
    l
    s
    i
    e
    " i
    d
    =
    "
    l
    i
    n
    k
    1
    "
    h
    t
    t
    p
    :
    /
    /
    e
    x
    a
    m
    p
    l
    e
    .
    c
    o
    m
    /
    e
    l
    s
    i
    e
    h
    t
    t
    p
    :
    /
    /
    e
    x
    a
    m
    p
    l
    e
    .
    c
    o
    m
    /
    l
    a
    c
    i
    e
    h
    t
    t
    p
    :
    /
    /
    e
    x
    a
    m
    p
    l
    e
    .
    c
    o
    m
    /
    t
    i
    l
    l
    i
    e
    T
    h
    e D
    o
    r
    m
    o
    u
    s
    e
    '
    s s
    t
    o
    r
    y
    T
    h
    e D
    o
    r
    m
    o
    u
    s
    e
    '
    s s
    t
    o
    r
    y
    O
    n
    c
    e u
    p
    o
    n a t
    i
    m
    e t
    h
    e
    r
    e w
    e
    r
    e t
    h
    r
    e
    e l
    i
    t
    t
    l
    e s
    i
    s
    t
    e
    r
    s
    ; a
    n
    d t
    h
    e
    i
    r n
    a
    E
    l
    s
    i
    e
    ,
    L
    a
    c
    i
    e a
    n
    d
    T
    i
    l
    l
    i
    e
    ;
    a
    n
    d t
    h
    e
    y l
    i
    v
    e
    d a
    t t
    h
    e b
    o
    t
    t
    o
    m o
    f a w
    e
    l
    l
    .
    .
    .
    .
    5 / 20

    View full-size slide

  6. Example #3
    h
    e
    a
    d
    _
    t
    a
    g = s
    o
    u
    p
    .
    h
    e
    a
    d
    p
    r
    i
    n
    t h
    e
    a
    d
    _
    t
    a
    g # <
    h
    e
    a
    d
    >
    <
    t
    i
    t
    l
    e
    >
    T
    h
    e D
    o
    r
    m
    o
    u
    s
    e
    '
    s s
    t
    o
    r
    y
    <
    /
    t
    i
    t
    l
    e
    >
    <
    /
    h
    e
    a
    d
    >
    p
    r
    i
    n
    t h
    e
    a
    d
    _
    t
    a
    g
    .
    c
    o
    n
    t
    e
    n
    t
    s # [
    <
    t
    i
    t
    l
    e
    >
    T
    h
    e D
    o
    r
    m
    o
    u
    s
    e
    '
    s s
    t
    o
    r
    y
    <
    /
    t
    i
    t
    l
    e
    >
    ]
    p
    r
    i
    n
    t h
    e
    a
    d
    _
    t
    a
    g
    .
    s
    t
    r
    i
    n
    g # u
    '
    T
    h
    e D
    o
    r
    m
    o
    u
    s
    e
    '
    s s
    t
    o
    r
    y
    '
    f
    o
    r c
    h
    i
    l
    d i
    n h
    e
    a
    d
    _
    t
    a
    g
    .
    d
    e
    s
    c
    e
    n
    d
    a
    n
    t
    s
    : # <
    t
    i
    t
    l
    e
    >
    T
    h
    e D
    o
    r
    m
    o
    u
    s
    e
    '
    s s
    t
    o
    r
    y
    <
    /
    t
    i
    t
    l
    e
    >
    p
    r
    i
    n
    t
    (
    c
    h
    i
    l
    d
    ) # T
    h
    e D
    o
    r
    m
    o
    u
    s
    e
    '
    s s
    t
    o
    r
    y
    # -
    -
    -
    -
    -
    -
    -
    t
    i
    t
    l
    e
    _
    t
    a
    g = h
    e
    a
    d
    _
    t
    a
    g
    .
    c
    o
    n
    t
    e
    n
    t
    s
    [
    0
    ]
    p
    r
    i
    n
    t t
    i
    t
    l
    e
    _
    t
    a
    g # <
    t
    i
    t
    l
    e
    >
    T
    h
    e D
    o
    r
    m
    o
    u
    s
    e
    '
    s s
    t
    o
    r
    y
    <
    /
    t
    i
    t
    l
    e
    >
    p
    r
    i
    n
    t t
    i
    t
    l
    e
    _
    t
    a
    g
    .
    c
    o
    n
    t
    e
    n
    t
    s # [
    u
    '
    T
    h
    e D
    o
    r
    m
    o
    u
    s
    e
    '
    s s
    t
    o
    r
    y
    '
    ]
    p
    r
    i
    n
    t t
    i
    t
    l
    e
    _
    t
    a
    g
    .
    s
    t
    r
    i
    n
    g # u
    '
    T
    h
    e D
    o
    r
    m
    o
    u
    s
    e
    '
    s s
    t
    o
    r
    y
    '
    t
    e
    x
    t = t
    i
    t
    l
    e
    _
    t
    a
    g
    .
    c
    o
    n
    t
    e
    n
    t
    s
    [
    0
    ]
    # p
    r
    i
    n
    t t
    e
    x
    t
    .
    c
    o
    n
    t
    e
    n
    t
    s # A
    t
    t
    r
    i
    b
    u
    t
    e
    E
    r
    r
    o
    r
    : '
    N
    a
    v
    i
    g
    a
    b
    l
    e
    S
    t
    r
    i
    n
    g
    ' o
    b
    j
    e
    c
    t h
    a
    s n
    o a
    t
    t
    r
    i
    b
    u
    t
    e '
    c
    o
    n
    t
    e
    n
    t
    s
    '
    f
    o
    r c
    h
    i
    l
    d i
    n t
    i
    t
    l
    e
    _
    t
    a
    g
    .
    c
    h
    i
    l
    d
    r
    e
    n
    :
    p
    r
    i
    n
    t
    (
    c
    h
    i
    l
    d
    ) # T
    h
    e D
    o
    r
    m
    o
    u
    s
    e
    '
    s s
    t
    o
    r
    y
    <
    h
    e
    a
    d
    >
    <
    t
    i
    t
    l
    e
    >
    T
    h
    e D
    o
    r
    m
    o
    u
    s
    e
    '
    s s
    t
    o
    r
    y
    <
    /
    t
    i
    t
    l
    e
    >
    <
    /
    h
    e
    a
    d
    >
    [
    <
    t
    i
    t
    l
    e
    >
    T
    h
    e D
    o
    r
    m
    o
    u
    s
    e
    '
    s s
    t
    o
    r
    y
    <
    /
    t
    i
    t
    l
    e
    >
    ]
    T
    h
    e D
    o
    r
    m
    o
    u
    s
    e
    '
    s s
    t
    o
    r
    y
    <
    t
    i
    t
    l
    e
    >
    T
    h
    e D
    o
    r
    m
    o
    u
    s
    e
    '
    s s
    t
    o
    r
    y
    <
    /
    t
    i
    t
    l
    e
    >
    T
    h
    e D
    o
    r
    m
    o
    u
    s
    e
    '
    s s
    t
    o
    r
    y
    # -
    -
    -
    -
    -
    -
    -
    <
    t
    i
    t
    l
    e
    >
    T
    h
    e D
    o
    r
    m
    o
    u
    s
    e
    '
    s s
    t
    o
    r
    y
    <
    /
    t
    i
    t
    l
    e
    >
    [
    u
    "
    T
    h
    e D
    o
    r
    m
    o
    u
    s
    e
    '
    s s
    t
    o
    r
    y
    "
    ]
    T
    h
    e D
    o
    r
    m
    o
    u
    s
    e
    '
    s s
    t
    o
    r
    y
    T
    h
    e D
    o
    r
    m
    o
    u
    s
    e
    '
    s s
    t
    o
    r
    y
    6 / 20

    View full-size slide

  7. Example #4
    # p
    r
    i
    n
    t s
    o
    u
    p
    .
    c
    o
    n
    t
    e
    n
    t
    s
    p
    r
    i
    n
    t l
    e
    n
    (
    s
    o
    u
    p
    .
    c
    o
    n
    t
    e
    n
    t
    s
    ) # 1
    p
    r
    i
    n
    t s
    o
    u
    p
    .
    c
    o
    n
    t
    e
    n
    t
    s
    [
    0
    ]
    .
    n
    a
    m
    e # u
    '
    h
    t
    m
    l
    '
    p
    r
    i
    n
    t l
    e
    n
    (
    l
    i
    s
    t
    (
    s
    o
    u
    p
    .
    c
    h
    i
    l
    d
    r
    e
    n
    )
    ) # 1
    p
    r
    i
    n
    t l
    e
    n
    (
    l
    i
    s
    t
    (
    s
    o
    u
    p
    .
    d
    e
    s
    c
    e
    n
    d
    a
    n
    t
    s
    )
    ) # 2
    5
    # -
    -
    -
    -
    -
    -
    -
    -
    p
    r
    i
    n
    t
    (
    s
    o
    u
    p
    .
    h
    t
    m
    l
    .
    s
    t
    r
    i
    n
    g
    ) # N
    o
    n
    e
    #
    f
    o
    r s
    t
    r
    i
    n
    g i
    n s
    o
    u
    p
    .
    s
    t
    r
    i
    n
    g
    s
    :
    # p
    r
    i
    n
    t
    (
    r
    e
    p
    r
    (
    s
    t
    r
    i
    n
    g
    )
    )
    f
    o
    r s
    t
    r
    i
    n
    g i
    n s
    o
    u
    p
    .
    s
    t
    r
    i
    p
    p
    e
    d
    _
    s
    t
    r
    i
    n
    g
    s
    :
    p
    r
    i
    n
    t
    (
    r
    e
    p
    r
    (
    s
    t
    r
    i
    n
    g
    )
    )
    1
    h
    t
    m
    l
    1
    2
    5
    N
    o
    n
    e
    # -
    -
    -
    -
    -
    -
    -
    -
    u
    "
    T
    h
    e D
    o
    r
    m
    o
    u
    s
    e
    '
    s s
    t
    o
    r
    y
    "
    u
    "
    T
    h
    e D
    o
    r
    m
    o
    u
    s
    e
    '
    s s
    t
    o
    r
    y
    "
    u
    '
    O
    n
    c
    e u
    p
    o
    n a t
    i
    m
    e t
    h
    e
    r
    e w
    e
    r
    e t
    h
    r
    e
    e l
    i
    t
    t
    l
    e s
    i
    s
    t
    e
    r
    s
    ; a
    n
    d t
    h
    e
    i
    r
    u
    '
    E
    l
    s
    i
    e
    '
    u
    '
    ,
    '
    u
    '
    L
    a
    c
    i
    e
    '
    u
    '
    a
    n
    d
    '
    u
    '
    T
    i
    l
    l
    i
    e
    '
    u
    '
    ;
    \
    n
    a
    n
    d t
    h
    e
    y l
    i
    v
    e
    d a
    t t
    h
    e b
    o
    t
    t
    o
    m o
    f a w
    e
    l
    l
    .
    '
    u
    '
    .
    .
    .
    '
    7 / 20

    View full-size slide

  8. Example #5
    s
    o
    u
    p = B
    e
    a
    u
    t
    i
    f
    u
    l
    S
    o
    u
    p
    (
    '
    <
    b c
    l
    a
    s
    s
    =
    "
    b
    o
    l
    d
    e
    s
    t
    "
    >
    E
    x
    t
    r
    e
    m
    e
    l
    y b
    o
    l
    d
    <
    /
    b
    >
    '
    t
    a
    g = s
    o
    u
    p
    .
    b
    p
    r
    i
    n
    t t
    y
    p
    e
    (
    t
    a
    g
    )
    p
    r
    i
    n
    t t
    a
    g
    .
    n
    a
    m
    e # u
    '
    b
    '
    t
    a
    g
    .
    n
    a
    m
    e = "
    b
    l
    o
    c
    k
    q
    u
    o
    t
    e
    "
    p
    r
    i
    n
    t t
    a
    g # <
    b
    l
    o
    c
    k
    q
    u
    o
    t
    e c
    l
    a
    s
    s
    =
    "
    b
    o
    l
    d
    e
    s
    t
    "
    >
    E
    x
    t
    r
    e
    m
    e
    l
    y b
    o
    l
    d
    <
    /
    b
    l
    o
    c
    k
    q
    u
    o
    t
    e
    >
    p
    r
    i
    n
    t t
    a
    g
    [
    '
    c
    l
    a
    s
    s
    '
    ] # u
    '
    b
    o
    l
    d
    e
    s
    t
    '
    p
    r
    i
    n
    t t
    a
    g
    .
    a
    t
    t
    r
    s # {
    u
    '
    c
    l
    a
    s
    s
    '
    : u
    '
    b
    o
    l
    d
    e
    s
    t
    '
    }
    t
    a
    g
    [
    '
    c
    l
    a
    s
    s
    '
    ] = '
    v
    e
    r
    y
    b
    o
    l
    d
    '
    t
    a
    g
    [
    '
    i
    d
    '
    ] = 1
    p
    r
    i
    n
    t t
    a
    g # <
    b
    l
    o
    c
    k
    q
    u
    o
    t
    e c
    l
    a
    s
    s
    =
    "
    v
    e
    r
    y
    b
    o
    l
    d
    " i
    d
    =
    "
    1
    "
    >
    E
    x
    t
    r
    e
    m
    e
    l
    y b
    o
    l
    d
    <
    /
    b
    l
    o
    c
    k
    q
    u
    o
    t
    e
    >
    # -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    d
    e
    l t
    a
    g
    [
    '
    c
    l
    a
    s
    s
    '
    ]
    d
    e
    l t
    a
    g
    [
    '
    i
    d
    '
    ]
    p
    r
    i
    n
    t t
    a
    g # <
    b
    l
    o
    c
    k
    q
    u
    o
    t
    e
    >
    E
    x
    t
    r
    e
    m
    e
    l
    y b
    o
    l
    d
    <
    /
    b
    l
    o
    c
    k
    q
    u
    o
    t
    e
    >
    #
    p
    r
    i
    n
    t t
    a
    g
    [
    '
    c
    l
    a
    s
    s
    '
    ] # K
    e
    y
    E
    r
    r
    o
    r
    : '
    c
    l
    a
    s
    s
    '
    p
    r
    i
    n
    t
    (
    t
    a
    g
    .
    g
    e
    t
    (
    '
    c
    l
    a
    s
    s
    '
    )
    ) # N
    o
    n
    e
    <
    c
    l
    a
    s
    s '
    b
    s
    4
    .
    e
    l
    e
    m
    e
    n
    t
    .
    T
    a
    g
    '
    >
    b
    <
    b
    l
    o
    c
    k
    q
    u
    o
    t
    e c
    l
    a
    s
    s
    =
    "
    b
    o
    l
    d
    e
    s
    t
    "
    >
    E
    x
    t
    r
    e
    m
    e
    l
    y b
    o
    l
    d
    <
    /
    b
    l
    o
    c
    k
    q
    u
    o
    t
    e
    >
    [
    '
    b
    o
    l
    d
    e
    s
    t
    '
    ]
    {
    '
    c
    l
    a
    s
    s
    '
    : [
    '
    b
    o
    l
    d
    e
    s
    t
    '
    ]
    }
    <
    b
    l
    o
    c
    k
    q
    u
    o
    t
    e c
    l
    a
    s
    s
    =
    "
    v
    e
    r
    y
    b
    o
    l
    d
    " i
    d
    =
    "
    1
    "
    >
    E
    x
    t
    r
    e
    m
    e
    l
    y b
    o
    l
    d
    <
    /
    b
    l
    o
    c
    k
    q
    u
    o
    t
    e
    # -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    <
    b
    l
    o
    c
    k
    q
    u
    o
    t
    e
    >
    E
    x
    t
    r
    e
    m
    e
    l
    y b
    o
    l
    d
    <
    /
    b
    l
    o
    c
    k
    q
    u
    o
    t
    e
    >
    N
    o
    n
    e
    8 / 20

    View full-size slide

  9. Example #6
    c
    l
    a
    s
    s
    _
    s
    o
    u
    p = B
    e
    a
    u
    t
    i
    f
    u
    l
    S
    o
    u
    p
    (
    '
    <
    p c
    l
    a
    s
    s
    =
    "
    b
    o
    d
    y s
    t
    r
    i
    k
    e
    o
    u
    t
    "
    >
    <
    /
    p
    >
    '
    p
    r
    i
    n
    t c
    l
    a
    s
    s
    _
    s
    o
    u
    p
    .
    p
    [
    '
    c
    l
    a
    s
    s
    '
    ] # [
    "
    b
    o
    d
    y
    "
    , "
    s
    t
    r
    i
    k
    e
    o
    u
    t
    "
    ]
    c
    l
    a
    s
    s
    _
    s
    o
    u
    p = B
    e
    a
    u
    t
    i
    f
    u
    l
    S
    o
    u
    p
    (
    '
    <
    p c
    l
    a
    s
    s
    =
    "
    b
    o
    d
    y
    "
    >
    <
    /
    p
    >
    '
    )
    p
    r
    i
    n
    t c
    l
    a
    s
    s
    _
    s
    o
    u
    p
    .
    p
    [
    '
    c
    l
    a
    s
    s
    '
    ] # [
    "
    b
    o
    d
    y
    "
    ]
    i
    d
    _
    s
    o
    u
    p = B
    e
    a
    u
    t
    i
    f
    u
    l
    S
    o
    u
    p
    (
    '
    <
    p i
    d
    =
    "
    m
    y i
    d
    "
    >
    <
    /
    p
    >
    '
    )
    p
    r
    i
    n
    t i
    d
    _
    s
    o
    u
    p
    .
    p
    [
    '
    i
    d
    '
    ] # '
    m
    y i
    d
    '
    # -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    r
    e
    l
    _
    s
    o
    u
    p = B
    e
    a
    u
    t
    i
    f
    u
    l
    S
    o
    u
    p
    (
    '
    <
    p
    >
    B
    a
    c
    k t
    o t
    h
    e <
    a r
    e
    l
    =
    "
    i
    n
    d
    e
    x
    "
    >
    h
    o
    m
    e
    p
    a
    g
    e
    <
    /
    a
    >
    <
    /
    p
    >
    '
    p
    r
    i
    n
    t r
    e
    l
    _
    s
    o
    u
    p
    .
    a
    [
    '
    r
    e
    l
    '
    ] # [
    '
    i
    n
    d
    e
    x
    '
    ]
    r
    e
    l
    _
    s
    o
    u
    p
    .
    a
    [
    '
    r
    e
    l
    '
    ] = [
    '
    i
    n
    d
    e
    x
    '
    , '
    c
    o
    n
    t
    e
    n
    t
    s
    '
    ]
    p
    r
    i
    n
    t
    (
    r
    e
    l
    _
    s
    o
    u
    p
    .
    p
    ) # <
    p
    >
    B
    a
    c
    k t
    o t
    h
    e <
    a r
    e
    l
    =
    "
    i
    n
    d
    e
    x c
    o
    n
    t
    e
    n
    t
    s
    "
    >
    h
    o
    m
    e
    p
    a
    g
    e
    <
    /
    a
    >
    <
    /
    p
    >
    # -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    x
    m
    l
    _
    s
    o
    u
    p = B
    e
    a
    u
    t
    i
    f
    u
    l
    S
    o
    u
    p
    (
    '
    <
    p c
    l
    a
    s
    s
    =
    "
    b
    o
    d
    y s
    t
    r
    i
    k
    e
    o
    u
    t
    "
    >
    <
    /
    p
    >
    '
    ,
    p
    r
    i
    n
    t x
    m
    l
    _
    s
    o
    u
    p
    .
    p
    [
    '
    c
    l
    a
    s
    s
    '
    ] # u
    '
    b
    o
    d
    y s
    t
    r
    i
    k
    e
    o
    u
    t
    '
    [
    '
    b
    o
    d
    y
    '
    , '
    s
    t
    r
    i
    k
    e
    o
    u
    t
    '
    ]
    [
    '
    b
    o
    d
    y
    '
    ]
    m
    y i
    d
    # -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    [
    '
    i
    n
    d
    e
    x
    '
    ]
    <
    p
    >
    B
    a
    c
    k t
    o t
    h
    e <
    a r
    e
    l
    =
    "
    i
    n
    d
    e
    x c
    o
    n
    t
    e
    n
    t
    s
    "
    >
    h
    o
    m
    e
    p
    a
    g
    e
    <
    /
    a
    >
    <
    /
    p
    >
    # -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    b
    o
    d
    y s
    t
    r
    i
    k
    e
    o
    u
    t
    When you turn a tag back into a string, multiple attribute
    values are consolidated.
    If you parse a document as XML, there are no multi-
    valued attributes.
    The r
    e
    l
    attribute specifies the relationship between the
    current document and the linked document (Only used if
    the h
    r
    e
    f
    attribute is present).
    9 / 20

    View full-size slide

  10.  Easy Web Scraping
    @miguelgrinberg
    10 / 20

    View full-size slide

  11. PyCon 2014 - Page Index
    11 / 20

    View full-size slide

  12. PyCon 2014 - Page Details
    12 / 20

    View full-size slide

  13. PyCon 2014 - YouTube
    13 / 20

    View full-size slide

  14. Test #1
    i
    m
    p
    o
    r
    t r
    e
    q
    u
    e
    s
    t
    s
    i
    m
    p
    o
    r
    t b
    s
    4
    r
    e
    s
    p
    o
    n
    s
    e = r
    e
    q
    u
    e
    s
    t
    s
    .
    g
    e
    t
    (
    '
    h
    t
    t
    p
    :
    /
    /
    p
    y
    v
    i
    d
    e
    o
    .
    o
    r
    g
    /
    c
    a
    t
    e
    g
    o
    r
    y
    /
    5
    0
    /
    p
    y
    c
    o
    n
    -
    u
    s
    -
    2
    0
    1
    4
    '
    s
    o
    u
    p = b
    s
    4
    .
    B
    e
    a
    u
    t
    i
    f
    u
    l
    S
    o
    u
    p
    (
    r
    e
    s
    p
    o
    n
    s
    e
    .
    t
    e
    x
    t
    )
    # a
    t
    a
    g
    s = s
    o
    u
    p
    .
    s
    e
    l
    e
    c
    t
    (
    '
    d
    i
    v
    #
    v
    i
    d
    e
    o
    -
    s
    u
    m
    m
    a
    r
    y
    -
    c
    o
    n
    t
    e
    n
    t a
    [
    h
    r
    e
    f
    ^
    =
    /
    v
    i
    d
    e
    o
    ]
    '
    )
    l
    i
    n
    k
    s = [
    a
    .
    a
    t
    t
    r
    s
    .
    g
    e
    t
    (
    '
    h
    r
    e
    f
    '
    ) f
    o
    r a i
    n s
    o
    u
    p
    .
    s
    e
    l
    e
    c
    t
    (
    '
    d
    i
    v
    #
    v
    i
    d
    e
    o
    -
    s
    u
    m
    m
    a
    r
    y
    -
    c
    o
    n
    t
    e
    n
    t a
    [
    h
    r
    e
    f
    ^
    =
    /
    v
    i
    d
    e
    o
    ]
    '
    p
    r
    i
    n
    t l
    i
    n
    k
    s
    [
    1
    :
    5
    ]
    [
    '
    /
    v
    i
    d
    e
    o
    /
    2
    6
    7
    6
    /
    2
    d
    3
    d
    -
    g
    r
    a
    p
    h
    i
    c
    s
    -
    w
    i
    t
    h
    -
    p
    y
    t
    h
    o
    n
    -
    o
    n
    -
    m
    o
    b
    i
    l
    e
    -
    p
    l
    a
    t
    f
    o
    r
    m
    s
    '
    l
    i
    n
    k
    s = [
    a
    .
    a
    t
    t
    r
    s
    .
    g
    e
    t
    (
    '
    h
    r
    e
    f
    '
    ) f
    o
    r a i
    n s
    o
    u
    p
    .
    s
    e
    l
    e
    c
    t
    (
    '
    d
    i
    v
    #
    v
    i
    d
    e
    o
    -
    s
    u
    m
    m
    a
    r
    y
    -
    c
    o
    n
    t
    e
    n
    t s
    t
    r
    o
    n
    g a
    [
    h
    r
    e
    f
    ^
    =
    /
    v
    i
    d
    e
    o
    ]
    '
    pycon-scraper.py #1
    i
    m
    p
    o
    r
    t b
    s
    4
    i
    m
    p
    o
    r
    t r
    e
    i
    m
    p
    o
    r
    t r
    e
    q
    u
    e
    s
    t
    s
    i
    m
    p
    o
    r
    t a
    r
    g
    p
    a
    r
    s
    e
    f
    r
    o
    m m
    u
    l
    t
    i
    p
    r
    o
    c
    e
    s
    s
    i
    n
    g
    .
    p
    o
    o
    l i
    m
    p
    o
    r
    t T
    h
    r
    e
    a
    d
    P
    o
    o
    l a
    s P
    o
    o
    l
    r
    o
    o
    t
    _
    u
    r
    l = '
    h
    t
    t
    p
    :
    /
    /
    p
    y
    v
    i
    d
    e
    o
    .
    o
    r
    g
    '
    i
    n
    d
    e
    x
    _
    u
    r
    l = r
    o
    o
    t
    _
    u
    r
    l + '
    /
    c
    a
    t
    e
    g
    o
    r
    y
    /
    5
    0
    /
    p
    y
    c
    o
    n
    -
    u
    s
    -
    2
    0
    1
    4
    '
    d
    e
    f g
    e
    t
    _
    v
    i
    d
    e
    o
    _
    p
    a
    g
    e
    _
    u
    r
    l
    s
    (
    )
    :
    r
    e
    s
    p
    o
    n
    s
    e = r
    e
    q
    u
    e
    s
    t
    s
    .
    g
    e
    t
    (
    i
    n
    d
    e
    x
    _
    u
    r
    l
    )
    s
    o
    u
    p = b
    s
    4
    .
    B
    e
    a
    u
    t
    i
    f
    u
    l
    S
    o
    u
    p
    (
    r
    e
    s
    p
    o
    n
    s
    e
    .
    t
    e
    x
    t
    )
    a
    l
    l
    v
    i
    d
    s = [
    a
    .
    a
    t
    t
    r
    s
    .
    g
    e
    t
    (
    '
    h
    r
    e
    f
    '
    ) f
    o
    r a i
    n s
    o
    u
    p
    .
    s
    e
    l
    e
    c
    t
    (
    '
    d
    i
    v
    #
    v
    r
    e
    t
    u
    r
    n a
    l
    l
    v
    i
    d
    s
    [
    0
    :
    1
    0
    ]
    14 / 20

    View full-size slide

  15. Test #2
    r
    o
    o
    t
    _
    u
    r
    l = '
    h
    t
    t
    p
    :
    /
    /
    p
    y
    v
    i
    d
    e
    o
    .
    o
    r
    g
    '
    v
    i
    d
    e
    o
    _
    p
    a
    g
    e
    _
    u
    r
    l = '
    /
    v
    i
    d
    e
    o
    /
    2
    6
    6
    8
    /
    w
    r
    i
    t
    i
    n
    g
    -
    r
    e
    s
    t
    f
    u
    l
    -
    w
    e
    b
    -
    s
    e
    r
    v
    i
    c
    e
    s
    -
    w
    i
    t
    h
    -
    f
    l
    a
    s
    k
    '
    v
    i
    d
    e
    o
    _
    d
    a
    t
    a = {
    }
    r
    e
    s
    p
    o
    n
    s
    e = r
    e
    q
    u
    e
    s
    t
    s
    .
    g
    e
    t
    (
    r
    o
    o
    t
    _
    u
    r
    l + v
    i
    d
    e
    o
    _
    p
    a
    g
    e
    _
    u
    r
    l
    )
    s
    o
    u
    p = b
    s
    4
    .
    B
    e
    a
    u
    t
    i
    f
    u
    l
    S
    o
    u
    p
    (
    r
    e
    s
    p
    o
    n
    s
    e
    .
    t
    e
    x
    t
    )
    v
    i
    d
    e
    o
    _
    d
    a
    t
    a
    [
    '
    t
    i
    t
    l
    e
    '
    ] = s
    o
    u
    p
    .
    s
    e
    l
    e
    c
    t
    (
    '
    d
    i
    v
    #
    v
    i
    d
    e
    o
    b
    o
    x h
    3
    '
    )
    [
    0
    ]
    .
    g
    e
    t
    _
    t
    e
    x
    t
    (
    )
    v
    i
    d
    e
    o
    _
    d
    a
    t
    a
    [
    '
    s
    p
    e
    a
    k
    e
    r
    s
    '
    ] = [
    a
    .
    g
    e
    t
    _
    t
    e
    x
    t
    (
    ) f
    o
    r a i
    n s
    o
    u
    p
    .
    s
    e
    l
    e
    c
    t
    (
    v
    i
    d
    e
    o
    _
    d
    a
    t
    a
    [
    '
    y
    o
    u
    t
    u
    b
    e
    _
    u
    r
    l
    '
    ] = s
    o
    u
    p
    .
    s
    e
    l
    e
    c
    t
    (
    '
    d
    i
    v
    #
    s
    i
    d
    e
    b
    a
    r a
    [
    h
    r
    e
    f
    ^
    =
    h
    t
    t
    p
    :
    /
    /
    w
    w
    w
    .
    y
    o
    u
    t
    u
    b
    e
    .
    c
    o
    m
    ]
    '
    p
    r
    i
    n
    t v
    i
    d
    e
    o
    _
    d
    a
    t
    a
    {
    '
    s
    p
    e
    a
    k
    e
    r
    s
    '
    : [
    u
    '
    M
    i
    g
    u
    e
    l G
    r
    i
    n
    b
    e
    r
    g
    '
    ]
    , '
    y
    o
    u
    t
    u
    b
    e
    _
    u
    r
    l
    '
    : u
    '
    h
    t
    t
    p
    :
    /
    /
    w
    w
    w
    .
    y
    o
    u
    t
    u
    b
    e
    .
    c
    o
    m
    /
    w
    a
    t
    c
    h
    ?
    v
    =
    p
    x
    _
    v
    g
    9
    F
    a
    r
    1
    Y
    '
    pycon-scraper.py #2
    d
    e
    f g
    e
    t
    _
    v
    i
    d
    e
    o
    _
    d
    a
    t
    a
    (
    v
    i
    d
    e
    o
    _
    p
    a
    g
    e
    _
    u
    r
    l
    )
    :
    v
    i
    d
    e
    o
    _
    d
    a
    t
    a = {
    }
    r
    e
    s
    p
    o
    n
    s
    e = r
    e
    q
    u
    e
    s
    t
    s
    .
    g
    e
    t
    (
    r
    o
    o
    t
    _
    u
    r
    l + v
    i
    d
    e
    o
    _
    p
    a
    g
    e
    _
    u
    r
    l
    )
    s
    o
    u
    p = b
    s
    4
    .
    B
    e
    a
    u
    t
    i
    f
    u
    l
    S
    o
    u
    p
    (
    r
    e
    s
    p
    o
    n
    s
    e
    .
    t
    e
    x
    t
    )
    v
    i
    d
    e
    o
    _
    d
    a
    t
    a
    [
    '
    t
    i
    t
    l
    e
    '
    ] = s
    o
    u
    p
    .
    s
    e
    l
    e
    c
    t
    (
    '
    d
    i
    v
    #
    v
    i
    d
    e
    o
    b
    o
    x h
    3
    '
    )
    [
    0
    ]
    .
    g
    e
    v
    i
    d
    e
    o
    _
    d
    a
    t
    a
    [
    '
    s
    p
    e
    a
    k
    e
    r
    s
    '
    ] = [
    a
    .
    g
    e
    t
    _
    t
    e
    x
    t
    (
    ) f
    o
    r a i
    n s
    o
    u
    p
    .
    s
    e
    l
    e
    c
    v
    i
    d
    e
    o
    _
    d
    a
    t
    a
    [
    '
    y
    o
    u
    t
    u
    b
    e
    _
    u
    r
    l
    '
    ] = s
    o
    u
    p
    .
    s
    e
    l
    e
    c
    t
    (
    '
    d
    i
    v
    #
    s
    i
    d
    e
    b
    a
    r a
    [
    h
    r
    e
    # .
    .
    .
    r
    e
    t
    u
    r
    n v
    i
    d
    e
    o
    _
    d
    a
    t
    a
    15 / 20

    View full-size slide

  16. Test #3
    i
    m
    p
    o
    r
    t r
    e
    q
    u
    e
    s
    t
    s
    i
    m
    p
    o
    r
    t b
    s
    4
    i
    m
    p
    o
    r
    t r
    e
    r
    e
    s
    p
    o
    n
    s
    e = r
    e
    q
    u
    e
    s
    t
    s
    .
    g
    e
    t
    (
    '
    h
    t
    t
    p
    s
    :
    /
    /
    w
    w
    w
    .
    y
    o
    u
    t
    u
    b
    e
    .
    c
    o
    m
    /
    w
    a
    t
    c
    h
    ?
    v
    =
    p
    x
    _
    v
    g
    9
    F
    a
    r
    1
    Y
    '
    s
    o
    u
    p = b
    s
    4
    .
    B
    e
    a
    u
    t
    i
    f
    u
    l
    S
    o
    u
    p
    (
    r
    e
    s
    p
    o
    n
    s
    e
    .
    t
    e
    x
    t
    )
    v
    i
    d
    e
    o
    _
    d
    a
    t
    a
    [
    '
    v
    i
    e
    w
    s
    '
    ] = i
    n
    t
    (
    r
    e
    .
    s
    u
    b
    (
    '
    [
    ^
    0
    -
    9
    ]
    '
    , '
    '
    , s
    o
    u
    p
    .
    s
    e
    l
    e
    c
    t
    (
    '
    .
    w
    a
    t
    c
    h
    -
    v
    i
    e
    w
    -
    c
    o
    u
    n
    t
    '
    v
    i
    d
    e
    o
    _
    d
    a
    t
    a
    [
    '
    l
    i
    k
    e
    s
    '
    ] = i
    n
    t
    (
    r
    e
    .
    s
    u
    b
    (
    '
    [
    ^
    0
    -
    9
    ]
    '
    , '
    '
    ,
    s
    o
    u
    p
    .
    s
    e
    l
    e
    c
    t
    (
    '
    .
    l
    i
    k
    e
    -
    b
    u
    t
    t
    o
    n
    -
    r
    e
    n
    d
    e
    r
    e
    r
    -
    l
    i
    k
    e
    -
    b
    u
    t
    t
    o
    n s
    p
    a
    n
    .
    y
    t
    -
    u
    i
    x
    -
    b
    u
    t
    t
    o
    n
    -
    c
    o
    n
    t
    e
    n
    t
    '
    v
    i
    d
    e
    o
    _
    d
    a
    t
    a
    [
    '
    d
    i
    s
    l
    i
    k
    e
    s
    '
    ] = i
    n
    t
    (
    r
    e
    .
    s
    u
    b
    (
    '
    [
    ^
    0
    -
    9
    ]
    '
    , '
    '
    ,
    s
    o
    u
    p
    .
    s
    e
    l
    e
    c
    t
    (
    p
    r
    i
    n
    t v
    i
    d
    e
    o
    _
    d
    a
    t
    a
    {
    '
    s
    p
    e
    a
    k
    e
    r
    s
    '
    : [
    u
    '
    M
    i
    g
    u
    e
    l G
    r
    i
    n
    b
    e
    r
    g
    '
    ]
    , '
    v
    i
    e
    w
    s
    '
    : 1
    1
    9
    0
    8
    , '
    t
    i
    t
    l
    e
    '
    :
    pycon-scraper.py #3
    d
    e
    f g
    e
    t
    _
    v
    i
    d
    e
    o
    _
    d
    a
    t
    a
    (
    v
    i
    d
    e
    o
    _
    p
    a
    g
    e
    _
    u
    r
    l
    )
    :
    # .
    .
    .
    # i
    n
    i
    t
    i
    a
    l
    i
    z
    e c
    o
    u
    n
    t
    e
    r
    s
    v
    i
    d
    e
    o
    _
    d
    a
    t
    a
    [
    '
    v
    i
    e
    w
    s
    '
    ] = 0
    v
    i
    d
    e
    o
    _
    d
    a
    t
    a
    [
    '
    l
    i
    k
    e
    s
    '
    ] = 0
    v
    i
    d
    e
    o
    _
    d
    a
    t
    a
    [
    '
    d
    i
    s
    l
    i
    k
    e
    s
    '
    ] = 0
    t
    r
    y
    :
    r
    e
    s
    p
    o
    n
    s
    e = r
    e
    q
    u
    e
    s
    t
    s
    .
    g
    e
    t
    (
    v
    i
    d
    e
    o
    _
    d
    a
    t
    a
    [
    '
    y
    o
    u
    t
    u
    b
    e
    _
    u
    r
    l
    '
    ]
    , h
    e
    a
    s
    o
    u
    p = b
    s
    4
    .
    B
    e
    a
    u
    t
    i
    f
    u
    l
    S
    o
    u
    p
    (
    r
    e
    s
    p
    o
    n
    s
    e
    .
    t
    e
    x
    t
    )
    v
    i
    d
    e
    o
    _
    d
    a
    t
    a
    [
    '
    v
    i
    e
    w
    s
    '
    ] = i
    n
    t
    (
    r
    e
    .
    s
    u
    b
    (
    '
    [
    ^
    0
    -
    9
    ]
    '
    , '
    '
    , s
    o
    u
    p
    .
    s
    e
    v
    i
    d
    e
    o
    _
    d
    a
    t
    a
    [
    '
    l
    i
    k
    e
    s
    '
    ] = i
    n
    t
    (
    r
    e
    .
    s
    u
    b
    (
    '
    [
    ^
    0
    -
    9
    ]
    '
    , '
    '
    ,
    s
    o
    u
    p
    .
    s
    e
    l
    v
    i
    d
    e
    o
    _
    d
    a
    t
    a
    [
    '
    d
    i
    s
    l
    i
    k
    e
    s
    '
    ] = i
    n
    t
    (
    r
    e
    .
    s
    u
    b
    (
    '
    [
    ^
    0
    -
    9
    ]
    '
    , '
    '
    ,
    s
    o
    u
    p
    .
    e
    x
    c
    e
    p
    t
    :
    # s
    o
    m
    e o
    r a
    l
    l o
    f t
    h
    e c
    o
    u
    n
    t
    e
    r
    s c
    o
    u
    l
    d n
    o
    t b
    e s
    c
    r
    a
    p
    e
    d
    p
    a
    s
    s
    r
    e
    t
    u
    r
    n v
    i
    d
    e
    o
    _
    d
    a
    t
    a
    16 / 20

    View full-size slide

  17. pycon-scraper.py #4
    Notes
    d
    e
    f s
    h
    o
    w
    _
    v
    i
    d
    e
    o
    _
    s
    t
    a
    t
    s
    (
    o
    p
    t
    i
    o
    n
    s
    )
    :
    p
    o
    o
    l = P
    o
    o
    l
    (
    8
    )
    v
    i
    d
    e
    o
    _
    p
    a
    g
    e
    _
    u
    r
    l
    s = g
    e
    t
    _
    v
    i
    d
    e
    o
    _
    p
    a
    g
    e
    _
    u
    r
    l
    s
    (
    )
    r
    e
    s
    u
    l
    t
    s = p
    o
    o
    l
    .
    m
    a
    p
    (
    g
    e
    t
    _
    v
    i
    d
    e
    o
    _
    d
    a
    t
    a
    , v
    i
    d
    e
    o
    _
    p
    a
    g
    e
    _
    u
    r
    l
    s
    )
    # -
    -
    -
    -
    -
    f
    u
    n
    c
    (
    v
    i
    d
    e
    o
    )
    : r
    e
    t
    u
    r
    n v
    i
    d
    e
    o
    [
    o
    p
    t
    i
    o
    n
    s
    .
    s
    o
    r
    t
    ]
    d
    e
    f p
    a
    r
    s
    e
    _
    a
    r
    g
    s
    (
    )
    :
    p
    a
    r
    s
    e
    r = a
    r
    g
    p
    a
    r
    s
    e
    .
    A
    r
    g
    u
    m
    e
    n
    t
    P
    a
    r
    s
    e
    r
    (
    d
    e
    s
    c
    r
    i
    p
    t
    i
    o
    n
    =
    '
    S
    h
    o
    w P
    y
    C
    o
    n 2
    0
    1
    4 v
    i
    d
    e
    o s
    t
    a
    t
    i
    s
    t
    i
    c
    s
    .
    '
    p
    a
    r
    s
    e
    r
    .
    a
    d
    d
    _
    a
    r
    g
    u
    m
    e
    n
    t
    (
    '
    -
    -
    s
    o
    r
    t
    '
    , m
    e
    t
    a
    v
    a
    r
    =
    '
    F
    I
    E
    L
    D
    '
    , c
    h
    o
    i
    c
    e
    s
    =
    [
    p
    a
    r
    s
    e
    r
    .
    a
    d
    d
    _
    a
    r
    g
    u
    m
    e
    n
    t
    (
    '
    -
    -
    m
    a
    x
    '
    , m
    e
    t
    a
    v
    a
    r
    =
    '
    M
    A
    X
    '
    , t
    y
    p
    e
    =
    i
    n
    t
    , h
    e
    l
    p
    =
    p
    a
    r
    s
    e
    r
    .
    a
    d
    d
    _
    a
    r
    g
    u
    m
    e
    n
    t
    (
    '
    -
    -
    c
    s
    v
    '
    , a
    c
    t
    i
    o
    n
    =
    '
    s
    t
    o
    r
    e
    _
    t
    r
    u
    e
    '
    , d
    e
    f
    a
    u
    l
    t
    =
    p
    a
    r
    s
    e
    r
    .
    a
    d
    d
    _
    a
    r
    g
    u
    m
    e
    n
    t
    (
    '
    -
    -
    w
    o
    r
    k
    e
    r
    s
    '
    , t
    y
    p
    e
    =
    i
    n
    t
    , d
    e
    f
    a
    u
    l
    t
    =
    8
    , h
    e
    l
    p
    =
    r
    e
    t
    u
    r
    n p
    a
    r
    s
    e
    r
    .
    p
    a
    r
    s
    e
    _
    a
    r
    g
    s
    (
    )
    # e
    x
    : p
    y
    t
    h
    o
    n p
    y
    c
    o
    n
    -
    s
    c
    r
    a
    p
    e
    r
    .
    p
    y -
    -
    s
    o
    r
    t v
    i
    e
    w
    s -
    -
    m
    a
    x 2
    5 -
    -
    w
    o
    r
    k
    e
    r
    s 8
    d
    e
    f s
    h
    o
    w
    _
    v
    i
    d
    e
    o
    _
    s
    t
    a
    t
    s
    (
    o
    p
    t
    i
    o
    n
    s
    )
    :
    p
    o
    o
    l = P
    o
    o
    l
    (
    o
    p
    t
    i
    o
    n
    s
    .
    w
    o
    r
    k
    e
    r
    s
    )
    v
    i
    d
    e
    o
    _
    p
    a
    g
    e
    _
    u
    r
    l
    s = g
    e
    t
    _
    v
    i
    d
    e
    o
    _
    p
    a
    g
    e
    _
    u
    r
    l
    s
    (
    )
    r
    e
    s
    u
    l
    t
    s = s
    o
    r
    t
    e
    d
    (
    p
    o
    o
    l
    .
    m
    a
    p
    (
    g
    e
    t
    _
    v
    i
    d
    e
    o
    _
    d
    a
    t
    a
    , v
    i
    d
    e
    o
    _
    p
    a
    g
    e
    _
    u
    r
    l
    s
    )
    p
    r
    i
    n
    t l
    e
    n
    (
    r
    e
    s
    u
    l
    t
    s
    )
    m
    a
    x = o
    p
    t
    i
    o
    n
    s
    .
    m
    a
    x
    i
    f m
    a
    x i
    s N
    o
    n
    e o
    r m
    a
    x > l
    e
    n
    (
    r
    e
    s
    u
    l
    t
    s
    )
    :
    m
    a
    x = l
    e
    n
    (
    r
    e
    s
    u
    l
    t
    s
    )
    i
    f o
    p
    t
    i
    o
    n
    s
    .
    c
    s
    v
    :
    p
    r
    i
    n
    t
    (
    u
    '
    "
    t
    i
    t
    l
    e
    "
    ,
    "
    s
    p
    e
    a
    k
    e
    r
    s
    "
    , "
    v
    i
    e
    w
    s
    "
    ,
    "
    l
    i
    k
    e
    s
    "
    ,
    "
    d
    i
    s
    l
    i
    k
    e
    s
    "
    e
    l
    s
    e
    :
    p
    r
    i
    n
    t
    (
    u
    '
    V
    i
    e
    w
    s +
    1 -
    1 T
    i
    t
    l
    e (
    S
    p
    e
    a
    k
    e
    r
    s
    )
    '
    )
    f
    o
    r i i
    n r
    a
    n
    g
    e
    (
    m
    a
    x
    )
    :
    i
    f o
    p
    t
    i
    o
    n
    s
    .
    c
    s
    v
    :
    p
    r
    i
    n
    t
    (
    u
    '
    "
    {
    0
    }
    "
    ,
    "
    {
    1
    }
    "
    ,
    {
    2
    }
    ,
    {
    3
    }
    ,
    {
    4
    }
    '
    .
    f
    o
    r
    m
    a
    t
    (
    r
    e
    s
    u
    l
    t
    s
    [
    i
    ]
    e
    l
    s
    e
    :
    p
    r
    i
    n
    t
    (
    u
    '
    {
    0
    :
    5
    d
    } {
    1
    :
    3
    d
    } {
    2
    :
    3
    d
    } {
    3
    } (
    {
    4
    }
    )
    '
    .
    f
    o
    r
    m
    a
    t
    (
    r
    e
    s
    i
    f _
    _
    n
    a
    m
    e
    _
    _ =
    = '
    _
    _
    m
    a
    i
    n
    _
    _
    '
    :
    s
    h
    o
    w
    _
    v
    i
    d
    e
    o
    _
    s
    t
    a
    t
    s
    (
    p
    a
    r
    s
    e
    _
    a
    r
    g
    s
    (
    )
    )
    17 / 20

    View full-size slide

  18. $> python pycon-scraper.py --sort views
    V
    i
    e
    w
    s +
    1 -
    1 T
    i
    t
    l
    e (
    S
    p
    e
    a
    k
    e
    r
    s
    )
    8
    6
    0
    8 8
    0 1
    0 A
    n
    a
    l
    y
    z
    i
    n
    g R
    a
    p L
    y
    r
    i
    c
    s w
    i
    t
    h P
    y
    t
    h
    o
    n (
    J
    u
    l
    i
    e L
    a
    v
    o
    i
    e
    )
    7
    3
    0
    2 2
    8 1 B
    u
    i
    l
    d
    i
    n
    g t
    h
    e A
    p
    p (
    M
    i
    k
    e B
    a
    y
    e
    r
    )
    4
    6
    0
    3 2
    5 3 2
    D
    /
    3
    D g
    r
    a
    p
    h
    i
    c
    s w
    i
    t
    h P
    y
    t
    h
    o
    n o
    n m
    o
    b
    i
    l
    e p
    l
    a
    t
    f
    o
    r
    m
    s (
    N
    i
    k
    o S
    k
    r
    y
    p
    n
    i
    k
    )
    4
    0
    5
    6 3
    0 0 D
    e
    s
    i
    g
    n
    i
    n
    g D
    j
    a
    n
    g
    o
    '
    s M
    i
    g
    r
    a
    t
    i
    o
    n
    s (
    A
    n
    d
    r
    e
    w G
    o
    d
    w
    i
    n
    )
    3
    9
    2
    3 4
    1 0 C
    h
    e
    a
    p H
    e
    l
    i
    c
    o
    p
    t
    e
    r
    s I
    n M
    y L
    i
    v
    i
    n
    g R
    o
    o
    m (
    N
    e
    d J
    a
    c
    k
    s
    o
    n L
    o
    v
    e
    l
    y
    )
    3
    4
    0
    7 3
    6 2 A S
    c
    e
    n
    i
    c D
    r
    i
    v
    e t
    h
    r
    o
    u
    g
    h t
    h
    e D
    j
    a
    n
    g
    o R
    e
    q
    u
    e
    s
    t
    -
    R
    e
    s
    p
    o
    n
    s
    e C
    y
    c
    l
    e (
    D
    a
    n L
    a
    n
    g
    e
    r
    )
    3
    3
    4
    3 3
    3 0 A
    d
    v
    a
    n
    c
    e
    d t
    e
    c
    h
    n
    i
    q
    u
    e
    s f
    o
    r W
    e
    b f
    u
    n
    c
    t
    i
    o
    n
    a
    l t
    e
    s
    t
    i
    n
    g (
    J
    u
    l
    i
    e
    n P
    h
    a
    l
    i
    p
    )
    1
    5
    9
    8 2
    8 0 D
    a
    t
    a i
    n
    t
    e
    n
    s
    i
    v
    e b
    i
    o
    l
    o
    g
    y i
    n t
    h
    e c
    l
    o
    u
    d
    : i
    n
    s
    t
    r
    u
    m
    e
    n
    t
    i
    n
    g A
    L
    L t
    h
    e t
    h
    i
    n
    g
    s
    (
    C
    . T
    i
    t
    u
    s B
    r
    o
    w
    n
    )
    9
    4
    1 8 0 D
    e
    l
    i
    v
    e
    r Y
    o
    u
    r S
    o
    f
    t
    w
    a
    r
    e I
    n A
    n E
    n
    v
    e
    l
    o
    p
    e (
    A
    u
    g
    i
    e F
    a
    c
    k
    l
    e
    r
    , N
    a
    t
    h
    a
    n
    i
    e
    l M
    a
    n
    i
    s
    t
    a
    )
    7
    5
    1 1 0 C
    l
    o
    s
    i
    n
    g a
    d
    d
    r
    e
    s
    s - P
    y
    C
    o
    n 2
    0
    1
    4 (
    2
    0
    1
    4
    /
    0
    4
    /
    1
    3
    ) (
    )
    18 / 20

    View full-size slide

  19. References
    1. Beautiful Soup Documentation
    2. Easy Web Scraping with Python
    3. Generate statistics about PyCon 2014 videos
    19 / 20

    View full-size slide

  20.  END
    Eueung Mulyana
    http://eueung.github.io/python/bs4
    Python CodeLabs | Attribution-ShareAlike CC BY-SA
    20 / 20

    View full-size slide