08. Web Document Webbaseloader

08. Web Document (WebBaseLoader)

WebBaseLoader

WebBaseLoader adalah pemuat yang memuat dokumen berbasis web.

Menggunakan pustaka bs4 untuk mengurai halaman web.

  • Menggunakan bs4.SoupStrainer untuk menentukan elemen yang akan diurai.
  • Gunakan parameter bs_kwargs untuk menentukan argumen tambahan untuk bs4.SoupStrainer.

Lihat

Python
import bs4
from langchain_community.document_loaders import WebBaseLoader
 
# Memuat konten artikel berita.
loader = WebBaseLoader(
    web_paths=("https://n.news.naver.com/article/437/0000378416",),
    bs_kwargs=dict(
        parse_only=bs4.SoupStrainer(
            "div",
            attrs={"class": ["newsct_article _article_body", "media_end_head_title"]},
        )
    ),
    header_template={
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.0.0 Safari/537.36",
    },
)
 
docs = loader.load()
print(f"Jumlah dokumen: {len(docs)}")
docs

Untuk mengatasi kesalahan autentikasi SSL, Anda dapat mengatur opsi “verifikasi”.

Python
# Lewati autentikasi SSL
loader.requests_kwargs = {"verify": False}
 
# Memuat data
docs = loader.load()

Anda juga dapat memuat beberapa halaman web sekaligus. Untuk melakukan ini, Anda dapat mengoper daftar URL ke pemuat, yang akan mengembalikan daftar dokumen dalam urutan URL yang dioper.

Python
loader = WebBaseLoader(
    web_paths=[
        "https://n.news.naver.com/article/437/0000378416",
        "https://n.news.naver.com/mnews/hotissue/article/092/0002340014?type=series&cid=2000063",
    ],
    bs_kwargs=dict(
        parse_only=bs4.SoupStrainer(
            "div",
            attrs={"class": ["newsct_article _article_body", "media_end_head_title"]},
        )
    ),
    header_template={
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.0.0 Safari/537.36",
    },
)
 
# Muat data
docs = loader.load()
 
# Periksa jumlah dokumen
print(len(docs))

Keluarkan hasil yang diambil dari web.

Python
print(docs[0].page_content[:500])
print("===" * 10)
print(docs[1].page_content[:500])

Anda dapat mempercepat proses pengikisan dengan mengikis beberapa URL secara bersamaan.

Ada batas yang wajar untuk permintaan bersamaan, yang standarnya adalah dua per detik. Jika Anda tidak khawatir dengan beban server, atau jika Anda mengontrol server tempat Anda mengikis, Anda dapat meningkatkan jumlah maksimum permintaan bersamaan dengan mengubah parameter requests_per_second. Hal ini dapat mempercepat pengikisan, tetapi Anda harus berhati-hati karena Anda mungkin akan diblokir oleh server.

Python
# Jalankan pada jupyter notebook(asyncio)
import nest_asyncio
 
nest_asyncio.apply()
Python
# Mengatur jumlah permintaan per detik
loader.requests_per_second = 1
 
# Muat data
docs = loader.aload()
Python
# Keluarkan hasilnya
docs

Menggunakan proxy

Anda mungkin perlu menggunakan proxy untuk menerobos pemblokiran IP.

Untuk menggunakan proxy, Anda dapat mengoper kamus proxy ke pemuat (dan request di bawahnya).

Python
loader = WebBaseLoader(
    "https://www.google.com/search?q=parrots",py
    proxies={
        "http": "http://{username}:{password}:@proxy.service.com:6666/",
        "https": "https://{username}:{password}:@proxy.service.com:6666/",
    },
    # Inisialisasi pemuat berbasis web
    # Menyiapkan proxy
)
 
# Muat dokumen
docs = loader.load()