Python Crawling Practice.2

Crawling Practice pt.2

오늘은 아주아주 재미있는 주제로 도전해보려고 한다… 바로바로 !!!!! 크롤링이다!!

이번에는 주제 단어를 입력해서 포털 사이트를 연결해서 관련 주제에 대한 정보들을 불러오는 걸 해볼 생각이다. (크롤링 수업 때 배운 내용과 코드를 활용해 반복문으로 바꿔서 추가로 해봤다.)

주제는 드라마다… 드라마 제목을 입력받아 관련 정보를 출력하고 리스트 등에 저장해서 이걸 분석해볼 생각이다.. (사실 정보관련 해서 문제 발생을 방지하기 위해 이 포스팅을 복제하거나 하는 그런 건 방지할 필요가 있을 것 같다… 윤리적인 부분 포함해서 이 포스팅으로 개인적인 이익을 얻거나 하는 일은 전혀 없다!!!!)

크롤링하기 전에 당연히 BeautifulSoup 패키지가 있어야하고 크롤링 준비를 위한 코드들을 확인해야한다..

이번에 해볼 분석은 우선 드라마 이름을 입력하면 해당 드라마의 줄거리와 배역 정보를 출력하고 이에 대한 관련된 키워드들이 포함된 네이버 카페, 블로그의 링크를 뽑아보려고 한다. 단, 드라마는 10개만 저장해서 뽑을 생각이다. 이 정보들을 전부 csv파일에 저장할 생각이다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
import requests 
from bs4 import BeautifulSoup
import time
import pandas as pd

cnt = 0
drama_nm = []
drama_txt = []
drama_info = []
drama_link = []

while True:
cnt += 1

drama = input('드라마 이름을 입력하세요 : ')
drama_nm.append(drama)

url = f'https://search.daum.net/search?w=tot&DA=YZR&t__nil_searchbox=btn&sug=&sugo=&sq=&o=&q={drama}'
response = requests.get(url)
html = BeautifulSoup(response.text, 'html.parser')
time.sleep(2)

drama_summary = html.select('dd.cont')[0].text
drama_info.append(drama_summary)

print(f'드라마 줄거리 : {drama_summary}')
print()

print(' 배역 배우')
print(' ------------------')
for cont in html.select('div#tv_casting li')[1:]:
drama_info.append(cont.text)
print(cont.text)
print()

url1 = f'https://search.naver.com/search.naver?where=nexearch&sm=top_sug.pre&fbm=1&acr=1&acq=%EA%B2%80%EC%9D%80&qdt=0&ie=utf8&query={drama}'
res = requests.get(url1)
html1 = BeautifulSoup(res.text, 'html.parser')
html1.select('a')

for txt in html1.select('a'):
if drama in txt.text:
if ('cafe' in txt.attrs['href']) or ('blog' in txt.attrs['href']):
drama_txt.append(txt.text)
drama_link.append(txt.attrs['href'])
print(f"{txt.text}: 링크 => {txt.attrs['href']}")
else:
pass
else:
pass

time.sleep(5)
dr_l = {'drama_nm': drama_nm, 'drama_txt': drama_txt, 'drama_info': drama_info, 'drama_link': drama_link}
for l, k in zip(dr_l.values(), dr_l.keys()):
dr = pd.DataFrame(l)
dr.to_csv(f'{k}.csv', index=False, encoding = 'utf8')

if cnt > 10:
break
print()
time.sleep(2)
print(drama_nm)
print()
print(drama_info)
print()
print(drama_txt)
print()
print(drama_link)
  • Against unauthorized copy and deployment.