데이터사이언스/크롤링

[Requests/BeutifulSoup] 특허 검색

Zero Coding 2022. 6. 20. 13:16

1. 키워드에 맞는 특허에 대한 검색

  • WIPS등에서 특허검색식을 이용한 방식이 더 정확하고 적절하나 간이로 검색하기 위해서 아래 코드 사
import requests
from bs4 import BeautifulSoup
from urllib import parse
from datetime import datetime as dt
import pandas as pd
import time
import re

pageNo = 1
end_page = -1
key1 = "스마트 뷰티 미러"
key2 = key1.replace(" ", "*")
key1_de = parse.quote(parse.quote(key1))
key2_de = parse.quote(parse.quote(key2))
rows = 30

df = pd.DataFrame(columns=["상태", "제목", "출원인", "요약", "출원일자", "등록일자", "공개일자"])
index = 0

while True:
    url = f"http://kportal.kipris.or.kr/kportal/resulta.do?next=patentList&FROM=SEARCH&searchInTransKorToEng=N&searchInTransEngToKor=N&row={rows}&page={pageNo}&queryText={key1_de}&expression={key2_de}"
    data = requests.get(url)
    data_new = re.sub('<!HS>|<!HE>', "", data.text)
    xml= BeautifulSoup(data_new, "xml")
    items = xml.select("article")

    if end_page + 1 != pageNo:
        if len(items) > 1:
            for li in items:
                df.loc[index] = {
                    "상태": li.select_one("STATUS").text,
                    "제목": li.select_one("TLV").text,
                    "출원인": li.select_one("APV").text,
                    "요약": li.select_one("ABV").text,
                    "출원일자": li.select_one("ADV").text,
                    "등록일자": li.select_one("GDV").text,
                    "공개일자": li.select_one("ODV").text,
                }
                index += 1
        else:
            print("-" * 100)
            print(f"{dt.now().strftime('%Y-%m-%d %H:%M:%S')} Crawling is finished at LastPage {pageNo - 1}, Thank You!!")
            break
    else:
        print("-"*100)
        print(f"{dt.now().strftime('%Y-%m-%d %H:%M:%S')} Crawling is finished at PageNo {pageNo-1}, Thank You!!")
        break
    print(f"{dt.now().strftime('%Y-%m-%d %H:%M:%S')} Url Request Success, PageNo is {pageNo}")
    pageNo += 1
    time.sleep(0.5)


df.to_excel(f"data/특허정보_{key1}_{dt.now().strftime('%Y%m%d_%H%M')}.xlsx")