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