5 Library Python untuk Scraping

Muhammad Arslan 18 September 2017

5 Library Python untuk Scraping

Web scraping atau web automation adalah suatu teknik dimana kita melakukan aktivitas di atas sebuah website tanpa menggunakan browser. Dapat menggunakan pendekatan programming ataupun tidak. Salah satu manfaat web scraping adalah bagaimana kamu melakukan aktivitas otomatis seperti pembelian tiket pesawat, namun mengakomodasi banyak user padahal hanya melewati satu akun.

Contoh lainnya adalah bagaimana kamu dapat membuat website yang berisi jurnal dari akun - akun esklusif padahal kamu tidak memiliki izin untuk melakukan web scraping dan mengambil isinya. Web scraping juga dilakukan bila suatu layanan tidak memiliki web service namun memiliki informasi yang berguna dari website-nya.

Baca juga: 6 Library PHP untuk Web Scraping

Dengan menggunakan Python, kamu dapat melakukan web scraping dengan cepat dan mudah. Berikut adalah beberapa library untuk melakukan web scraping di Python.

###1. Standard Library

Pada dasarnya web scraping melibatkan dua hal, request dan response parsing. Python sendiri memiliki library untuk melakukan request diatas HTTP dengan menggunakan modul urllib atau urllib2.

Lalu untuk parsing hasil response-nya dapat kamu gunakan beberapa parser seperti CSVParser, XMLParser, HTMLParser, SimpleDOM, lxml, dan lainnya. Namun tentu fiturnya tidak akan sekaya library lain yang sudah dikembangkan lebih lanjut.

import urllib.request
with urllib.request.urlopen('http://python.org/') as response:
   html = response.read()
from HTMLParser import HTMLParser

# create a subclass and override the handler methods
class MyHTMLParser(HTMLParser):
    def handle_starttag(self, tag, attrs):
        print "Encountered a start tag:", tag

    def handle_endtag(self, tag):
        print "Encountered an end tag :", tag

    def handle_data(self, data):
        print "Encountered some data  :", data

# instantiate the parser and fed it some HTML
parser = MyHTMLParser()
parser.feed('<html><head><title>Test</title></head>'
            '<body><h1>Parse me!</h1></body></html>')

###2. Requests

Library yang satu ini memiliki sejumlah fitur seperti dapat menanangni request dengan method GET, POST, PUT, HEAD, OPTION, dan DELETE. Juga dapat menangani custom header untuk melewatkan nilai - nilai tertentu saat akan melakukan request.

Tidak hanya melakukan request, kamu pun dapat mengirimkan form-data dan gambar yang akan diterima oleh suatu website.

>>> r = requests.get('https://api.github.com/user', auth=('user', 'pass'))
>>> r.status_code
200
>>> r.headers['content-type']
'application/json; charset=utf8'
>>> r.encoding
'utf-8'
>>> r.text
u'{"type":"User"...'
>>> r.json()
{u'private_gists': 419, u'total_private_repos': 77, ...}

###3. BeautifulSoup4

API-nya tidak jauh dengan jQuery, dimana kamu dapat melakukan seleksi berbasis class atau ID melalui selektor tertentu. BeautifulSoup4 merupakan library untuk HTML parsing dan mendapatkan isinya secara mudah. BeautifulSoup4 pun dapat menangani dokumen kompleks seperti XML. Namun tentu saja dioptimasikan untuk HTML.

Selain itu kamu pun dapat mengikuti kemanapun request itu di redirect dan menanganinya secara mudah.

soup.title
# <title>The Dormouse's story</title>

soup.title.name
# u'title'

soup.title.string
# u'The Dormouse's story'

soup.title.parent.name
# u'head'

soup.p
# <p class="title"><b>The Dormouse's story</b></p>

soup.p['class']
# u'title'

soup.a
# <a class="sister" href="http://example.com/elsie" id="link1">Elsie</a>

soup.find_all('a')
# [<a class="sister" href="http://example.com/elsie" id="link1">Elsie</a>,
#  <a class="sister" href="http://example.com/lacie" id="link2">Lacie</a>,
#  <a class="sister" href="http://example.com/tillie" id="link3">Tillie</a>]

soup.find(id="link3")
# <a class="sister" href="http://example.com/tillie" id="link3">Tillie</a>

###4. Selenium

Untuk library yang satu ini kamu dapat berpura - pura bahwa kamu sedang melakukan klik pada suatu tombol atau form di dalam halaman web tersebut. Dengan selenium juga kamu dapat melakukan berbagai aktivitas seperti mengisi keranjang belanja, melakukan scroll halaman, melakukan refresh dan lainnya.

from selenium import webdriver
from selenium.webdriver.common.keys import Keys

driver = webdriver.Firefox()
driver.get("http://www.python.org")
assert "Python" in driver.title
elem = driver.find_element_by_name("q")
elem.clear()
elem.send_keys("pycon")
elem.send_keys(Keys.RETURN)
assert "No results found." not in driver.page_source
driver.close()

###5. Scrapy

Bisa dibilang library ini merupakan library superior dari keempat library sebelumnya. Kamu dapat melakukan scraping dengan lebih mudah dan cepat didukung oleh API yang lengkap. Fitur yang dimiliki pun lebih advance dan sudah teruji oleh pembuat Scrapy sendiri untuk menangani berbagai macam proyek.

import scrapy

class BlogSpider(scrapy.Spider):
    name = 'blogspider'
    start_urls = ['https://blog.scrapinghub.com']

    def parse(self, response):
        for title in response.css('h2.entry-title'):
            yield {'title': title.css('a ::text').extract_first()}

        for next_page in response.css('div.prev-post > a'):
            yield response.follow(next_page, self.parse)
EOF
 scrapy runspider myspider.py