Development/ETC

웹 크라울링(Web Crawling)

석찬 2019. 4. 25. 23:00
반응형

코드 원 제작자께서 허락해주셔서 올리게 되는 파이썬 웹 크라울링!

 

딴게 게시판에서 어느분이 기존 코드 웹 크라울링 코드를 수정해 달라고 글을 올리셨다.

쪽지와 메일이 오가면서 소스를 받고 필요하신 사항을 정리한 후에 수정을해서 드렸다

 

예전에 자바에서  html 태그 파싱해서 사용한적이 있는데

확실히 파이썬이 그 보다는 수월하게 구현되는것 같다.(파이썬 만세)

 

간략히 내용을 정리 하자면

먼저 태그 파싱을 위해서 BeautifulSoup  이라는 라이브러리를 사용한다.

 

아래와 같은 코드로 특정 url의 내용르 받아서 BeautifulSoup 객체로 받아낸다.

soup = BeautifulSoup(source_code_from_URL, 'html.parser', from_encoding='UTF-8')

 

특정 사이트의 게시판 같은 곳에서 검색한 결과에 대한 글 전체를 가지고 오도록 하는 내용인데 아래와 같이 구현해서 검색 결과에서 글 링크들을 전부 가져 오도록 하고 있다.

(이 부분은 원 제작자분이 구현해 놓으신 부분이다.)

for title in soup.find_all('div', 'table-row'): title_link = title.select('a') article_URL = title_link[0]['href'] get_text(article_URL, output_file)

 

저렇게 가지고 온 링크들을 다시 get_text함수에 넘겨서 내용을 가지고 오도록 하고 있다.

아래가 get_text함수이다.(이것도 원 제작자분이 만드신걸 일부 수정했다.)

def get_text(URL, output_file): URL = "http://www.kindernews.net" + URL source_code_from_url = urllib.request.urlopen(URL) soup = BeautifulSoup(source_code_from_url, 'html.parser', from_encoding='UTF-8') title = soup.find('div', "article-head-title") news_date = soup.find("meta", property="article:published_time") content_of_article = soup.find_all('p') output_file.write(str(title)+"\n") output_file.write(str(news_date)+"\n") for item in content_of_article: string_item = str(item) output_file.write(string_item+"\n") output_file.write("\n")

 

soup.find나 soup.find_all부분이 흥미로웠다.

div tag나 meta tag나 어떤 형태든 가지고 올 수 있었다.

soup.find('p') 부분의 경우 가지고 와야 할 글이 모두 <p> 태그로 감싸져 있어서 저렇게 구현했다.

 

요즘 관리일 좀 소홀이 하면서 소소히 계속 개발을 들여다 보고 있는데, 역시 난 관리보다 개발이 적성이 더 맞는건가 싶기도 하고...

그런데 왜 C#은 그렇게 눈에 안들어 오는지...ㅠㅠ

반응형