H사 신문사 웹스크롤링 하기-3(검색어 입력받기)
저번 포스팅에서는 기사 제목과 내용을 스크롤링하는 것을 했는데, 이번에는 스크롤링 하려고 검색어을 입력받아 자동으로 스크롤링하는 것을 짜보겠습니다.
H사 웹 스크롤링
저번에 가져온 암호화 된 주소를 살펴보면 아래와 같은데, 여기서 검색어를 삽입해야합니다.
def han_article():
# 모듈 임포트
import urllib.request
from bs4 import BeautifulSoup
import re
import os
# 검색어 입력
search_text = input("검색어를 입력하세요 : ").encode("utf-8")
search_text = str(search_text)[2:-1].replace('\\x', '%')
##상세 기사 url
url_list = []
for i in range(30):
list_url = "http://search.hani.co.kr/Search?command=query&keyword="+search_text+"&media=news&submedia=&sort=d&period=all&datefrom=2020.01.01&dateto=2020.03.22&pageseq="+str(i)
url = urllib.request.Request(list_url) # url 요청
res = urllib.request.urlopen(url).read().decode("utf-8") # utf 파일로 decoding
soup = BeautifulSoup(res, "html.parser") # 전체 html
##url_list에 url 전체 담기
for link in soup.find_all('dt'): # dt 태그에 해당하는 모든 부분
for i in link: # resultset를 태그로 만드는 작업
#dt 태그 밑에 있는 a 태그를 가져오기 위해 for loop
url_list.append(i.get('href')) # 태그가 되어야 get, get_text()를 쓸 수 있다.
##상세 기사
full_article = []
# url 하나씩 불러오기
for i in range(len(url_list)):
url = urllib.request.Request(url_list[i])
res = urllib.request.urlopen(url).read().decode("utf-8")
# print(res) # 위의 두가지 작업을 거치면
# 위의 url 의 html 문서를 res 변수에 담을수 있게 된다.
soup = BeautifulSoup(res, "html.parser")
day = []
article = []
for link1, link2 in zip(soup.find_all('p', class_="date-time"), soup.find_all('div', class_="text")):
day.append(link1.get_text())
article.append(link2.get_text())
for i, j in zip(day, article):
full_article.append(i.strip())
full_article.append(j.strip())
f = open('han_article.txt', 'w', encoding='UTF-8')
f.writelines(full_article)
f.close()
han_article()
스크롤링이 잘되는 것을 확인 할 수 있는데, 여기서 특정 기간만 선택해서 스크롤링하고 싶다면 위 그림을 참고해서 수정하면 될 것 같네요.