# website-loader

## WebBaseLoader

### single website

```python
from langchain_community.document_loaders import WebBaseLoader
```

```python
loader = WebBaseLoader("https://www.espn.com/")
```

```python
data = loader.load()
data
```

```python
loader = WebBaseLoader(["https://www.espn.com", "https://google.com"])
docs = loader.load()
docs
```

### Load multiple urls concurrently

```python
%pip install --user -Uq  nest_asyncio

```

```python
# fixes a bug with asyncio and jupyter
import nest_asyncio

nest_asyncio.apply()
```

```python
loader = WebBaseLoader(["https://www.espn.com/", "https://google.com"])
loader.requests_per_second = 1
docs = loader.aload()
docs
```

### xml parser

```python
loader = WebBaseLoader(
    "https://www.govinfo.gov/content/pkg/CFR-2018-title10-vol3/xml/CFR-2018-title10-vol3-sec431-86.xml"
)
loader.default_parser = "xml"
docs = loader.load()
docs
```

## sitemap loader

### basic sitemap loader

```python
%pip install --user -Uq  nest_asyncio

# fixes a bug with asyncio and jupyter
import nest_asyncio

nest_asyncio.apply()
```

```python
from langchain_community.document_loaders.sitemap import SitemapLoader
```

```python
sitemap_loader = SitemapLoader(
    web_path="https://api.python.langchain.com/sitemap.xml")
docs = sitemap_loader.load()
```

```python
docs[0]
```

```python
## Filtering sitemap URLs
loader = SitemapLoader(
    web_path="https://api.python.langchain.com/sitemap.xml",
    filter_urls=["https://api.python.langchain.com/en/latest"],
)
documents = loader.load()
```

```python
documents[0]
```

### Add custom scraping rules

beautifulsoap4 를 사용

```python
%pip install --user  -Uq beautifulsoup4
```

```python
from bs4 import BeautifulSoup


def remove_nav_and_header_elements(content: BeautifulSoup) -> str:
    # Find all 'nav' and 'header' elements in the BeautifulSoup object
    nav_elements = content.find_all("nav")
    header_elements = content.find_all("header")

    # Remove each 'nav' and 'header' element from the BeautifulSoup object
    for element in nav_elements + header_elements:
        element.decompose()

    return str(content.get_text())


```

```python
loader = SitemapLoader(
    "https://api.python.langchain.com/sitemap.xml",
    filter_urls=["https://api.python.langchain.com/en/latest/"],
    parsing_function=remove_nav_and_header_elements,
)
```

```python
docs = loader.load()
docs
```

## Test

### Load sitemap

```python
sitemap_loader = SitemapLoader(
    web_path="https://api.python.langchain.com/sitemap.xml",
)
sitemap_loader.requests_per_second = 2

docs = sitemap_loader.load()
docs
```

### filter\_url

너무많을때는 filter url을 사용하자

```python
sitemap_loader = SitemapLoader(
    web_path="https://beta.thisisgame.com/sitemap.xml",
    filter_urls=[
        "https://beta.thisisgame.com/articles/265823"
    ],
)

sitemap_loader.requests_per_second = 2

docs = sitemap_loader.load()
docs
```

\[Document(page\_content='모바일 MMORPG ‘아케인’ 신규 아바타 6종 및 신규 업데이트 진행게임계 화제인게임 이슈오피니언기획/특집연재/카툰갤러리커뮤니티 로그인로그인작성자: (야토로)|2015-09-25 모바일 MMORPG ‘아케인’ 신규 아바타 6종 및 신규 업데이트 진행㈜엔터메이트(대표 이태현, //[www.entermate.com)가](http://www.entermate.com\)가) 서비스하고 플레이웍스 주식회사(대표 김광열)가 개발한 신작 모바일 MMORPG ‘아케인’이 민족 대명절 추석을 맞아 신규 아바타 및 정예 던전과 함께한가위 기념 이벤트를 24일(수) 함께 업데이트 했다고 밝혔다.먼저, 스페셜 아바타 패키지가 신규로 업데이트되었다. 이번에 추가 된 신규 아바타는 주술신 판토르,만렙 토끼, 페어리 나이트, 파멸자 아케론, 레드후드, 늑대 주술사 등 총 6종의 아바타가 추가되어 게임내에서 만나볼 수 있다. 추가로, 50레벨부터 입장 가능한 비밀전당 정예 던전이 추가되어 강력한 바다르 장비 제작이 가능한 특수 도안을 획득할 수 있다.또한, 민족 대명절 추석을 기념하여 풍성한 이벤트도 함께 준비했다. 첫 번째로, ‘송편 먹거나! 바꾸거나!’ 이벤트를 진행한다. 이벤트 기간 동안 몬스터를 처치하면 송편아이템을 획득할 수 있고, 획득한 송편은 사용 시 특수 버프 효과를 제공하거나, 50개를 모아 이벤트 NPC에게 교환하여 골드 교환이 가능한 쑥송편으로 교환할 수 있다. 두 번째로, 추석 이벤트 기간 동안 골드 2배 획득, 아이템 2배 획득 등의 특별한 버프를 제공하는 이벤트도 함께 진행한다.아케인은 지난 9월 2일 출시 된 신작 모바일 MMORPG로, 리니지, 바람의 나라 등 1세대 PC MMORPG의 향수를 불러일으키는 다양한 요소를 포함한 게임이다. 출시 초반 티스토어 인기 게임 1등, 구글 플레이 스토어 인기 3등 및 매출 순위 20위권에 진입하는 등 상승세를 보이며, 현재도 그 인기를 꾸준히 이어가고 있다.한편, ‘아케인’은 구글 플레이 스토어, 네이버 앱스토어, 이통\xa03사의 통합 마켓 원스토어\xa0등을 통해서 무료로 설치할 수 있으며, 게임과 관련된\xa0보다 자세한 정보는 공식 커뮤니티(//cafe.naver.com/arcanemobile)를 통해서 확인할 수 있다. \xa0이 기사가 마음에 드셨다면 공유해주세요THISISGAME전체 사이트맵제휴사 정보유통 정보TIG 소개이용약관개인정보 취급광고 및 제휴 문의제보하기질문 및 건의㈜디스이즈게임닷컴 | 등록번호: 서울 아 00368 | 등록일자: 2007년 5월 4일 | 제호: 디스이즈게임 | 발행인: 임상훈 | 편집인: 정우철주소: 서울특별시 강남구 테헤란로78길 12, MSA빌딩 12층 | 발행일자: 2005년 3월 14일 | 대표번호: 02)568-7917 | 청소년보호책임자: 김무겸디스이즈게임닷컴의 모든 콘텐츠는 저작권법의 보호를 받으며, 무단 전재, 복사, 배포를 금합니다.© 2024thisisgame.com', metadata={'source': '<https://beta.thisisgame.com/articles/265823>', 'loc': '<https://beta.thisisgame.com/articles/265823>', 'lastmod': '2015-09-25T01:34:31.000Z', 'changefreq': 'monthly', 'priority': '0.7'})]

사이트맵에서 읽어서 각 페이지를 전부다 문서로 가져온다.

### 글 수정

이 문서 내용중 뺄건 빼자.

```python
from bs4 import BeautifulSoup

def parse_page(soup):
    header = soup.find("header")
    footer = soup.find("footer")
    if header:
        header.decompose()
    if footer:
        footer.decompose()
    return (
        str(soup.get_text())
        .replace("\n", " ")
        .replace("\xa0", " ")
        .replace("진행게임계 화제인게임 이슈오피니언기획/특집연재/카툰갤러리커뮤니티 로그인로그인","")
    )
```

```python
sitemap_loader = SitemapLoader(
    web_path="https://beta.thisisgame.com/sitemap.xml",
    filter_urls=[
        "https://beta.thisisgame.com/articles/265823"
    ],
    parsing_function=parse_page,
)

sitemap_loader.requests_per_second = 2

docs = sitemap_loader.load()
docs[0]
```

Document(page\_content='모바일 MMORPG ‘아케인’ 신규 아바타 6종 및 신규 업데이트 진행게임계 화제인게임 이슈오피니언기획/특집연재/카툰갤러리커뮤니티 로그인로그인작성자: (야토로)|2015-09-25 모바일 MMORPG ‘아케인’ 신규 아바타 6종 및 신규 업데이트 진행㈜엔터메이트(대표 이태현, //[www.entermate.com)가](http://www.entermate.com\)가) 서비스하고 플레이웍스 주식회사(대표 김광열)가 개발한 신작 모바일 MMORPG ‘아케인’이 민족 대명절 추석을 맞아 신규 아바타 및 정예 던전과 함께한가위 기념 이벤트를 24일(수) 함께 업데이트 했다고 밝혔다.먼저, 스페셜 아바타 패키지가 신규로 업데이트되었다. 이번에 추가 된 신규 아바타는 주술신 판토르,만렙 토끼, 페어리 나이트, 파멸자 아케론, 레드후드, 늑대 주술사 등 총 6종의 아바타가 추가되어 게임내에서 만나볼 수 있다. 추가로, 50레벨부터 입장 가능한 비밀전당 정예 던전이 추가되어 강력한 바다르 장비 제작이 가능한 특수 도안을 획득할 수 있다.또한, 민족 대명절 추석을 기념하여 풍성한 이벤트도 함께 준비했다. 첫 번째로, ‘송편 먹거나! 바꾸거나!’ 이벤트를 진행한다. 이벤트 기간 동안 몬스터를 처치하면 송편아이템을 획득할 수 있고, 획득한 송편은 사용 시 특수 버프 효과를 제공하거나, 50개를 모아 이벤트 NPC에게 교환하여 골드 교환이 가능한 쑥송편으로 교환할 수 있다. 두 번째로, 추석 이벤트 기간 동안 골드 2배 획득, 아이템 2배 획득 등의 특별한 버프를 제공하는 이벤트도 함께 진행한다.아케인은 지난 9월 2일 출시 된 신작 모바일 MMORPG로, 리니지, 바람의 나라 등 1세대 PC MMORPG의 향수를 불러일으키는 다양한 요소를 포함한 게임이다. 출시 초반 티스토어 인기 게임 1등, 구글 플레이 스토어 인기 3등 및 매출 순위 20위권에 진입하는 등 상승세를 보이며, 현재도 그 인기를 꾸준히 이어가고 있다.한편, ‘아케인’은 구글 플레이 스토어, 네이버 앱스토어, 이통 사의 통합 마켓 원스토어\xa0등을 통해서 무료로 설치할 수 있으며, 게임과 관련된\xa0보다 자세한 정보는 공식 커뮤니티(//cafe.naver.com/arcanemobile)를 통해서 확인할 수 있다. \xa0이 기사가 마음에 드셨다면 공유해주세요', metadata={'source': '<https://beta.thisisgame.com/articles/265823>', 'loc': '<https://beta.thisisgame.com/articles/265823>', 'lastmod': '2015-09-25T01:34:31.000Z', 'changefreq': 'monthly', 'priority': '0.7'})

Document(page\_content='모바일 MMORPG ‘아케인’ 신규 아바타 6종 및 신규 업데이트 진행게임계 화제인게임 이슈오피니언기획/특집연재/카툰갤러리커뮤니티 로그인로그인작성자: (야토로)|2015-09-25 모바일 MMORPG ‘아케인’ 신규 아바타 6종 및 신규 업데이트 진행㈜엔터메이트(대표 이태현, //[www.entermate.com)가](http://www.entermate.com\)가) 서비스하고 플레이웍스 주식회사(대표 김광열)가 개발한 신작 모바일 MMORPG ‘아케인’이 민족 대명절 추석을 맞아 신규 아바타 및 정예 던전과 함께한가위 기념 이벤트를 24일(수) 함께 업데이트 했다고 밝혔다.먼저, 스페셜 아바타 패키지가 신규로 업데이트되었다. 이번에 추가 된 신규 아바타는 주술신 판토르,만렙 토끼, 페어리 나이트, 파멸자 아케론, 레드후드, 늑대 주술사 등 총 6종의 아바타가 추가되어 게임내에서 만나볼 수 있다. 추가로, 50레벨부터 입장 가능한 비밀전당 정예 던전이 추가되어 강력한 바다르 장비 제작이 가능한 특수 도안을 획득할 수 있다.또한, 민족 대명절 추석을 기념하여 풍성한 이벤트도 함께 준비했다. 첫 번째로, ‘송편 먹거나! 바꾸거나!’ 이벤트를 진행한다. 이벤트 기간 동안 몬스터를 처치하면 송편아이템을 획득할 수 있고, 획득한 송편은 사용 시 특수 버프 효과를 제공하거나, 50개를 모아 이벤트 NPC에게 교환하여 골드 교환이 가능한 쑥송편으로 교환할 수 있다. 두 번째로, 추석 이벤트 기간 동안 골드 2배 획득, 아이템 2배 획득 등의 특별한 버프를 제공하는 이벤트도 함께 진행한다.아케인은 지난 9월 2일 출시 된 신작 모바일 MMORPG로, 리니지, 바람의 나라 등 1세대 PC MMORPG의 향수를 불러일으키는 다양한 요소를 포함한 게임이다. 출시 초반 티스토어 인기 게임 1등, 구글 플레이 스토어 인기 3등 및 매출 순위 20위권에 진입하는 등 상승세를 보이며, 현재도 그 인기를 꾸준히 이어가고 있다.한편, ‘아케인’은 구글 플레이 스토어, 네이버 앱스토어, 이통 3사의 통합 마켓 원스토어 등을 통해서 무료로 설치할 수 있으며, 게임과 관련된 보다 자세한 정보는 공식 커뮤니티(//cafe.naver.com/arcanemobile)를 통해서 확인할 수 있다. 이 기사가 마음에 드셨다면 공유해주세요', metadata={'source': '<https://beta.thisisgame.com/articles/265823>', 'loc': '<https://beta.thisisgame.com/articles/265823>', 'lastmod': '2015-09-25T01:34:31.000Z', 'changefreq': 'monthly', 'priority': '0.7'})

Document(page\_content='모바일 MMORPG ‘아케인’ 신규 아바타 6종 및 신규 업데이트 작성자: (야토로)|2015-09-25 모바일 MMORPG ‘아케인’ 신규 아바타 6종 및 신규 업데이트 진행㈜엔터메이트(대표 이태현, //[www.entermate.com)가](http://www.entermate.com\)가) 서비스하고 플레이웍스 주식회사(대표 김광열)가 개발한 신작 모바일 MMORPG ‘아케인’이 민족 대명절 추석을 맞아 신규 아바타 및 정예 던전과 함께한가위 기념 이벤트를 24일(수) 함께 업데이트 했다고 밝혔다.먼저, 스페셜 아바타 패키지가 신규로 업데이트되었다. 이번에 추가 된 신규 아바타는 주술신 판토르,만렙 토끼, 페어리 나이트, 파멸자 아케론, 레드후드, 늑대 주술사 등 총 6종의 아바타가 추가되어 게임내에서 만나볼 수 있다. 추가로, 50레벨부터 입장 가능한 비밀전당 정예 던전이 추가되어 강력한 바다르 장비 제작이 가능한 특수 도안을 획득할 수 있다.또한, 민족 대명절 추석을 기념하여 풍성한 이벤트도 함께 준비했다. 첫 번째로, ‘송편 먹거나! 바꾸거나!’ 이벤트를 진행한다. 이벤트 기간 동안 몬스터를 처치하면 송편아이템을 획득할 수 있고, 획득한 송편은 사용 시 특수 버프 효과를 제공하거나, 50개를 모아 이벤트 NPC에게 교환하여 골드 교환이 가능한 쑥송편으로 교환할 수 있다. 두 번째로, 추석 이벤트 기간 동안 골드 2배 획득, 아이템 2배 획득 등의 특별한 버프를 제공하는 이벤트도 함께 진행한다.아케인은 지난 9월 2일 출시 된 신작 모바일 MMORPG로, 리니지, 바람의 나라 등 1세대 PC MMORPG의 향수를 불러일으키는 다양한 요소를 포함한 게임이다. 출시 초반 티스토어 인기 게임 1등, 구글 플레이 스토어 인기 3등 및 매출 순위 20위권에 진입하는 등 상승세를 보이며, 현재도 그 인기를 꾸준히 이어가고 있다.한편, ‘아케인’은 구글 플레이 스토어, 네이버 앱스토어, 이통 3사의 통합 마켓 원스토어 등을 통해서 무료로 설치할 수 있으며, 게임과 관련된 보다 자세한 정보는 공식 커뮤니티(//cafe.naver.com/arcanemobile)를 통해서 확인할 수 있다. 이 기사가 마음에 드셨다면 공유해주세요', metadata={'source': '<https://beta.thisisgame.com/articles/265823>', 'loc': '<https://beta.thisisgame.com/articles/265823>', 'lastmod': '2015-09-25T01:34:31.000Z', 'changefreq': 'monthly', 'priority': '0.7'})

### 문서를 split 하기

tiktoken을 사용하여 문서를 split

```python
from langchain.text_splitter import RecursiveCharacterTextSplitter

splitter = RecursiveCharacterTextSplitter.from_tiktoken_encoder(
    chunk_size=1000,
    chunk_overlap=200,
)

sitemap_loader = SitemapLoader(
    web_path="https://beta.thisisgame.com/sitemap.xml",
    filter_urls=[
        "https://beta.thisisgame.com/articles/2658"
    ],
    parsing_function=parse_page,
)

sitemap_loader.requests_per_second = 2

docs = sitemap_loader.load_and_split(text_splitter=splitter)
docs
```

56개의 문서가 스크래핑됫음

### vector store에 embedding해서 저장( cache also )

캐시도 하면서 embedding도 해서 vector에 저장

```python
%pip install --user -Uq faiss-cpu
#%pip install --user -Uq faiss-gpu
```

```python

from langchain.vectorstores.faiss import FAISS
from langchain_openai import OpenAIEmbeddings
from langchain.embeddings import CacheBackedEmbeddings
from langchain.storage import LocalFileStore

from dotenv import load_dotenv
load_dotenv()

cache_dir = LocalFileStore("./cache/")
embeddings = OpenAIEmbeddings()

cached_embeddings = CacheBackedEmbeddings.from_bytes_store (embeddings, cache_dir)

vector_store = FAISS.from_documents(docs, cached_embeddings)
```

```python

retriver = vector_store.as_retriever()
```

```python

docs = retriver.invoke("추석")
docs
```

### Chain (vector store에서 검색하고 그걸 llm으로 보내기)

이제 문서를 전부다 보내자.

이제 이 파일을 전부 llm을 보내거나

map reduce를 써서 lla에 각페이질르 보내고 답변을 받은후 이 답변을 마지막으로 llm으로 보내면 된다.

```python

from langchain.prompts import ChatPromptTemplate

prompt = ChatPromptTemplate.from_messages(
    [
        ("system",
         """
         You are a helpful AI talking to a human, Answer questions using only the following context.
         If you don't know the answer just say you don't know, don't make it up:
         {context}
         """),
        ("human", "{question}"),
    ]
)
```

```python

from langchain_openai import ChatOpenAI
llm = ChatOpenAI(
  temperature = 0.1,
  # model = "gpt-3.5-turbo",
)
```

```python
from langchain.schema.runnable import RunnablePassthrough
chain = ({
    "context": retriver,
    "question": RunnablePassthrough(),
    }
    | prompt | llm
)
```

### 질문을 해서 llm에 보내기

```python
chain.invoke("아케인에 대한 기사소개해줘")
```

아케인은 구글 플레이 스토어, 네이버 앱스토어, 이통 3사의 통합 마켓 원스토어 등을 통해서 무료로 설치할 수 있는 게임입니다. 현재 상승세를 보이며 스토어 인기 3등 및 매출 순위 20위권에 진입하고 있습니다. 게임과 관련된 보다 자세한 정보는 공식 커뮤니티를 통해서 확인할 수 있습니다

```python
chain.invoke("추석 이벤트를 한 게임은 뭘가")
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://teamsmiley.gitbook.io/devops/ai/langchain/website-loader.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
