과학 논문을 위한 웹 스크래핑

5542 단어 python

소개



ACL은 자연어 처리(NLP)와 관련된 연구 분야를 다루는 전산 언어학 협회(Association for Computational Linguistics)의 연례 회의입니다.
저는 NLP를 전문으로 하는 AI 석사 학생으로서 현재 전산 언어학 분야의 최첨단 연구를 찾고 있습니다.

웹 스크래핑을 사용하게 된 동기



올해 행사ACL2020(Association for Computational Linguistics)에서 여러 최신 과학 논문이 발표되었습니다.

저는 단순히 ACL2020 웹사이트에 게시된 모든 논문 목록과 초록을 갖고 싶었습니다. 이러한 세부 정보를 csv 파일에 저장하면 Excel을 사용하여 논문과 관련된 논문을 필터링하고 색상 코드를 지정할 수 있습니다.

해결책



ACL2020에 게시된 논문의 제목과 초록을 긁어모으기 위해 Python으로 짧은 스크립트를 작성했습니다.

먼저 필요한 라이브러리를 가져와야 했습니다.

import requests
import pandas as pd
from bs4 import BeautifulSoup

그런 다음 요청 라이브러리를 사용하여 ACL2020 Anthology 웹 페이지에 대한 응답을 받았습니다. 그런 다음 BeautifulSoup을 사용하여 웹 페이지(page.content)의 HTML을 구문 분석했습니다.

# Get Response object for webpage
page = requests.get(URL)
# Parse webpage HTML and save as BeautifulSoup object
soup = BeautifulSoup(page.content, 'html.parser')

처음에는 특정 웹 페이지에서 찾은 모든 논문의 제목을 추출했습니다. find_all() 메서드를 사용하여 다음 CSS 클래스d-sm-flex align-items-stretch가 있는 모든 단락 태그, 즉 종이 제목이 포함된 모든 단락을 찾았습니다.

title_paras = soup.find_all('p', class_='d-sm-flex align-items-stretch')



그러나 title_paras 변수의 항목은 제목 자체가 아닙니다. 이것이 내가 원하는 것입니다. 따라서 CSS 클래스align-middle가 있는 a 태그에 저장된 제목 텍스트에 도달할 때까지 각 단락 태그에 대한 각 하위 태그를 거쳐야 했습니다.

for para in title_paras:
    titles.append(para.find_all('span', class_='d-block')[1].find('a', class_='align-middle').text)



각 논문의 초록을 추출하기 위해 비슷한 과정을 거쳤습니다. 제목과 초록은 titlesabstracts라는 두 개의 목록에 저장되었습니다. 이 두 목록을 사용하여 pandas 데이터 프레임을 만들고 csv에 저장했습니다.

df = pd.DataFrame({'Title': titles, 'Abstract': abstracts})
df.to_csv('ACL 2020 Papers.csv', index=False)

이 짧은 프로젝트에 대한 GitHub 저장소(코드 및 필수 라이브러리 포함)는 찾을 수 있습니다here.

결론



이 게시물에서는 Python에서 BeautifulSoup을 사용하여 ACL2020에서 과학 논문 제목과 초록을 스크랩하고 pandas를 사용하여 csv 형식으로 데이터를 저장하는 방법을 살펴보았습니다.

유용한 링크


  • Beautiful Soup Documentation
  • Requests Quickstart
  • pandas Library Homepage
  • 좋은 웹페이지 즐겨찾기