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

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”.

# 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.

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.

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.

# Jalankan pada jupyter notebook(asyncio)
import nest_asyncio

nest_asyncio.apply()
# Mengatur jumlah permintaan per detik
loader.requests_per_second = 1

# Muat data
docs = loader.aload()
# 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).

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()

Last updated