scratchback

Crawler for Proggraming Course


License
MIT
Install
pip install scratchback==0.1

Documentation

scratchback

๋„ค์ด๋ฒ„ ๋‰ด์Šค์™€ ์ธ์Šคํƒ€๊ทธ๋žจ์„ ํฌ๋กค๋งํ•  ์ˆ˜ ์žˆ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ž…๋‹ˆ๋‹ค.

ํ•„์š” ์‚ฌํ•ญ

์ตœ์‹  ๋ฒ„์ „์˜ Anaconda๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ๊ณ„์‹œ๋Š” ๊ฒƒ์„ ์ถ”์ฒœ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ requests, beautifulsoup4, selenium ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์„ค์น˜๋˜์–ด ์žˆ์ง€ ์•Š๋‹ค๋ฉด ํ”„๋กฌํ”„ํŠธ(prompt)์—์„œ pip install requests, pip install beautifulsoup4, pip install selenium๋ฅผ ์‹คํ–‰ํ•˜์—ฌ requests, beautifulsoup4, selenium๋ฅผ ์„ค์น˜ํ•˜์…”์•ผ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. http://bit.ly/install-for-crawling ์„ ์ฐธ๊ณ ํ•˜์—ฌ ํ•„์š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค์„ ์„ค์น˜ํ•ด์ฃผ์„ธ์š”.

๋งŒ์•ฝ jupyter notebook์—์„œ ์„ค์น˜ํ•˜๊ธฐ๋ฅผ ์›ํ•œ๋‹ค๋ฉด !pip install <๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ด๋ฆ„>์„ ์ž…๋ ฅํ•˜๊ณ  ์‹คํ–‰์‹œํ‚ค๋ฉด ์„ค์น˜๊ฐ€ ์™„๋ฃŒ๋ฉ๋‹ˆ๋‹ค.

๋˜, Chrome ๋ธŒ๋ผ์šฐ์ €๋กœ ์ธ์Šคํƒ€๊ทธ๋žจ์— ์ ‘๊ทผํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ๋‹ค์Œ์˜ ๋งํฌ ์—์„œ ํฌ๋กฌ ๋ฒ„์ „์— ๋งž๋Š” ๋“œ๋ผ์ด๋ฒ„๋ฅผ ๋‹ค์šด๋กœ๋“œ ๋ฐ›์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ž‘์—…ํ•˜๊ณ  ์žˆ๋Š” PC์˜ ํฌ๋กฌ ๋ฒ„์ „์€ ์ฃผ์†Œ์ฐฝ์— chrome://version/๋ฅผ ์ž…๋ ฅํ•  ๊ฒฝ์šฐ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๋งจ ์ฒซ ์ค„์— Chrome : 75.0.3770.90์ด๋ผ๊ณ  ๋‚˜์™€์žˆ์„ ๊ฒฝ์šฐ 75 ๋ฒ„์ „์˜ ํฌ๋กฌ์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์„ค์น˜

ํ”„๋กฌํ”„ํŠธ(prompt) ์ฐฝ์— pip install scratchback์„ ์ž…๋ ฅํ•˜์—ฌ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

NaverNews Crawler

๋„ค์ด๋ฒ„ ๋‰ด์Šค์—์„œ๋„ '์†๋ณด' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‰ด์Šค ์ •๋ณด๋“ค์„ ๊ฐ€์ ธ์˜ค๋Š” ํฌ๋กค๋Ÿฌ์ž…๋‹ˆ๋‹ค. ๊ฐ€์ ธ์˜ค๋Š” ์ •๋ณด๋“ค๋กœ๋Š” ๊ธฐ์‚ฌ ์ œ๋ชฉ, ๊ธฐ์‚ฌ ๋ณธ๋ฌธ, ๊ธฐ์‚ฌ ๋‚ ์งœ, ์‹ ๋ฌธ์‚ฌ, ๊ธฐ์‚ฌ id, ๊ธฐ์‚ฌ url๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

์‚ฌ์šฉ ๋ฐฉ๋ฒ•

๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๋Š” ์ฝ”๋“œ๋Š” ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

from scratchback import NaverNews
crawler = NaverNews()

์œ„์™€ ๊ฐ™์ด NaverNews() ์ƒ์„ฑ ์‹œ์— ์•„๋ฌด ๊ฒƒ๋„ ์ง€์ •ํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ ์ฝ”๋“œ ์‹คํ–‰ํ•œ ๋‹น์ผ ๋„ค์ด๋ฒ„ ๋‰ด์Šค ์†๋ณด ์นดํ…Œ๊ณ ๋ฆฌ์˜ ์ฒซ ํŽ˜์ด์ง€ ๋‰ด์Šค ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.

crawler = NaverNews(page_num=3, page_start=4)

page_num๊ณผ page_start๋ฅผ ์ง€์ •ํ•จ์œผ๋กœ์จ ๋‚ ์งœ๋ณ„๋กœ ์–ด๋Š ํŽ˜์ด์ง€๋ถ€ํ„ฐ ์–ผ๋งˆ๋‚˜ ๊ฐ€์ ธ์˜ฌ์ง€๋ฅผ ์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋งŒ์•ฝ page_num๊ฐ’์„ ์ง€์ •ํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ๋‚ ์งœ๋ณ„๋กœ ํ•˜๋‚˜์˜ ํŽ˜์ด์ง€๋งŒ ๊ฐ€์ ธ์˜ค๋ฉฐ, page_start๋ฅผ ์ •ํ•˜์ง€ ์•Š์œผ๋ฉด 1ํŽ˜์ด์ง€๋ถ€ํ„ฐ ๊ฐ€์ ธ์˜ค๋„๋ก ์„ค์ •ํ•˜์˜€์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ํ˜„์žฌ ์กด์žฌํ•˜๋Š” ํŽ˜์ด์ง€ ์ˆ˜ ์ด์ƒ์˜ ํŽ˜์ด์ง€ ์ˆ˜๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ์กด์žฌํ•˜๋Š” ํŽ˜์ด์ง€ ์ˆ˜ ๋งŒํผ์˜ ์ •๋ณด๋งŒ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.

crawler = NaverNews(page_start=4, page_end=10)

page_num ๋Œ€์‹  page_end๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์–ด๋””์—์„œ๋ถ€ํ„ฐ ์–ด๋””๊นŒ์ง€ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ฌ์ง€ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋งŒ์•ฝ page_num, page_start, page_end๋ฅผ ์…‹ ๋‹ค ์„ค์ •ํ•˜์˜€๋Š”๋ฐ page_num์ด page_end - page_start + 1๊ฐ’๊ณผ ์ผ์น˜ํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๋‹ˆ ์œ ์˜ํ•˜์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค. page_start, page_end๋ฅผ ์ง€์ •ํ•  ๊ฒฝ์šฐ page_num์„ ์ง€์ •ํ•˜์ง€ ์•Š์•„๋„ ๋ฉ๋‹ˆ๋‹ค.

crawler = NaverNews(date_start="2019.06.14")

๋ณ€์ˆ˜๋กœ ๋‚ ์งœ๋ฅผ ์ง€์ •ํ•˜์—ฌ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ž…๋ ฅํ•˜๋Š” ๋‚ ์งœ์˜ ์–‘์‹์€ YYYY.MM.DD๋กœ, ๋‹ค๋ฅธ ์–‘์‹์€ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋”ฐ๋กœ ๋‚ ์งœ๋ฅผ ์ง€์ •ํ•˜์ง€ ์•Š์œผ๋ฉด ์˜ค๋Š˜ ๋‚ ์งœ๋กœ ์ง€์ •๋˜๊ณ  ๋ฏธ๋ž˜์˜ ๋‚ ์งœ๋ฅผ ์ž…๋ ฅํ•ด๋„ ์ž๋™์œผ๋กœ ์˜ค๋Š˜์˜ ๋‚ ์งœ๋กœ ์ง€์ •๋ฉ๋‹ˆ๋‹ค. ๋‚ ์งœ๋ฅผ ์ž…๋ ฅํ•˜๋Š” ๋ณ€์ˆ˜๋Š” date_start์™€ date_end๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์œ„์˜ ์ฝ”๋“œ์˜ ๊ฒฝ์šฐ 2019๋…„ 6์›” 14์ผ๋ถ€ํ„ฐ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋‚ ๊นŒ์ง€์˜ ๋‰ด์Šค ์†๋ณด๋ฅผ ๊ฐ€์ ธ์˜ค๋ฉฐ, ์ผ๋ณ„๋กœ ํ•œ ํŽ˜์ด์ง€๋งŒ์„ ๊ฐ€์ ธ์˜ค๋Š” ๊ธฐ๋Šฅ์„ ํ•ฉ๋‹ˆ๋‹ค.

crawler = NaverNews(date_start="2019.06.14", date_end="2019.06.16")

date_end ๋ณ€์ˆ˜๋ฅผ ํ†ตํ•ด ๊ฐ€์ ธ์˜ค๊ณ ์ž ํ•˜๋Š” ๋‚ ์˜ ๋งˆ์ง€๋ง‰๋„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. date_end๋ฅผ ๋”ฐ๋กœ ์ง€์ •ํ•˜์ง€ ์•Š๋Š” ๋‹ค๋ฉด ์˜ค๋Š˜ ๋‚ ์งœ๋กœ ์ง€์ •๋ฉ๋‹ˆ๋‹ค.

๋งŒ์•ฝ 2019๋…„ 6์›” 14์ผ๋ถ€ํ„ฐ 6์›” 16์ผ๊นŒ์ง€์˜ ๋‰ด์Šค ์†๋ณด๋ฅผ ๋‚ ์งœ๋ณ„๋กœ 1ํŽ˜์ด์ง€๋ถ€ํ„ฐ 10ํŽ˜์ด์ง€๊นŒ์ง€ ๊ฐ€์ ธ์˜ค๊ณ  ์‹ถ๋‹ค๋ฉด, ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ฝ”๋“œ๋ฅผ ํ†ตํ•ด ํฌ๋กค๋งํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

crawler = NaverNews(page_start=1, page_end=10, date_start="2019.06.14", date_end="2019.06.16")

crawl() ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋„ค์ด๋ฒ„ ๋‰ด์Šค ์†๋ณด ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

news_list = crawler.crawl()

๊ฒฐ๊ณผ๊ฐ’์ธ news_list์˜ ํ˜•ํƒœ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

{'headline': '[๋‚ ์”จ] ์˜ค๋Š˜ ์ดˆ์—ฌ๋ฆ„ ๋”์œ„ ์† ๊ณณ๊ณณ ์†Œ๋‚˜๊ธฐ...์ œ์ฃผ๋„ ยท๋‚จํ•ด์•ˆ ๋น„',
  'content': '์˜ค๋Š˜๋„ ์ดˆ์—ฌ๋ฆ„ ๋”์œ„๊ฐ€ ์ด์–ด์ง€๋Š” ๊ฐ€์šด๋ฐ ๋‚ด๋ฅ™ ๊ณณ๊ณณ์— ์†Œ๋‚˜๊ธฐ๊ฐ€, ์ œ์ฃผ๋„์™€ ๋‚จํ•ด์•ˆ์—๋Š” ๋น„๊ฐ€ ๋‚ด๋ฆด ๊ฒƒ์œผ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค.๊ธฐ์ƒ์ฒญ์€ ์˜ค๋Š˜ ์ œ์ฃผ๋„์™€ ๋‚จํ•ด์•ˆ์€ ๋‚จ์ชฝ์„ ์ง€๋‚˜๊ฐ€๋Š” ๊ธฐ์••๊ณจ ์˜ํ–ฅ์œผ๋กœ 5~30mm์˜ ๋น„๊ฐ€ ์˜ค๊ฒ ๋‹ค๊ณ  ๋ฐํ˜”์Šต๋‹ˆ๋‹ค.๋‚ด๋ฅ™์€ ๋Œ€์ฒด๋กœ ๋ง‘๊ฒ ์ง€๋งŒ, ์˜์„œ์™€ ๊ฒฝ๋ถ๊ณผ ์ „๋ถ ๋‚ด๋ฅ™์—๋Š” ๋Œ€๊ธฐ ๋ถˆ์•ˆ์ •์œผ๋กœ ์˜คํ›„ ํ•œ๋•Œ ์†Œ๋‚˜๊ธฐ๊ฐ€ ๋‚ด๋ฆฌ๋Š” ๊ณณ์ด ์žˆ๊ฒ ์Šต๋‹ˆ๋‹ค.์˜ค๋Š˜ ๋‚ฎ ๊ธฐ์˜จ์€ ์„œ์šธ๊ณผ ๋Œ€์ „ยท๋Œ€๊ตฌ 27๋„ ๋“ฑ ์–ด์ œ๋ณด๋‹ค 1โˆผ2๋„ ๋‚ฎ์ง€๋งŒ, ์—ฌ์ „ํžˆ ๋ฅ๊ฒ ์Šต๋‹ˆ๋‹ค.[์ €์ž‘๊ถŒ์ž(c) YTN & YTN PLUS ๋ฌด๋‹จ์ „์žฌ ๋ฐ ์žฌ๋ฐฐํฌ ๊ธˆ์ง€]',
  'written at': datetime.date(2019, 6, 14),
  'company': 'YTN',
  'url': 'https://news.naver.com/main/read.nhn?mode=LSD&mid=sec&sid1=001&oid=052&aid=0001306642',
  'title': '2๋ฒˆ์งธ ๋‰ด์Šค',
  'id': '052-0001306642'}

๋ฆฌ์ŠคํŠธ ๋‚ด์— ๊ฐ๊ฐ์˜ ๋‰ด์Šค์— ๋Œ€ํ•œ ์ •๋ณด๊ฐ€ ๋”•์…”๋„ˆ๋ฆฌ ํ˜•ํƒœ๋กœ ๋“ค์–ด์žˆ๋Š” ๋ชจ์Šต์ž…๋‹ˆ๋‹ค.

์•„๋ž˜์˜ ์ฝ”๋“œ๋ฅผ ํ†ตํ•ด ๊ฒฐ๊ณผ๊ฐ’์„ ๋ฐ์ดํ„ฐํ”„๋ ˆ์ž„ ํ˜•์‹์œผ๋กœ ๋ณ€ํ™˜ํ•œ ๋’ค csvํŒŒ์ผ๋กœ ์ €์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

import pandas as pd
data = pd.DataFrame(news_list)
data.to_csv("news.csv")

Instagram Crawler

์ธ์Šคํƒ€๊ทธ๋žจ ๊ณ„์ • ์•„์ด๋””๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ๊ณ„์ •์˜ ์—…๋กœ๋“œ๋œ ๊ฒŒ์‹œ๋ฌผ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ํฌ๋กค๋Ÿฌ์ž…๋‹ˆ๋‹ค.
ํŽ˜์ด์ง€ ๋กœ๋”ฉ์— 1๋ถ„ ์ด์ƒ ์†Œ์š”๋  ๊ฒฝ์šฐ ํ”„๋กœ๊ทธ๋žจ์ด ๋ฉˆ์ถ”๋„๋ก ์„ค๊ณ„๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ธํ„ฐ๋„ท ํ™˜๊ฒฝ์ด ์›ํ™œํ•œ ๊ณณ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ๊ถŒ์žฅ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

์‚ฌ์šฉ ๋ฐฉ๋ฒ•

์•„๋ž˜์™€ ๊ฐ™์ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋ถˆ๋Ÿฌ์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Instagram ๊ฐ์ฒด ์ƒ์„ฑ ์‹œ, ๋‹ค์šด๋กœ๋“œ ๋ฐ›์€ chromedriver์˜ ๊ฒฝ๋กœ๋ฅผ ์ž…๋ ฅํ•ด์ฃผ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

from scratchback import Instagram
crawler = Instagram("chromedriver")

crawler ๋ณ€์ˆ˜ ์ƒ์„ฑ ์‹œ headless ์˜ต์…˜์„ False๋กœ ์ง€์ •ํ•˜๋ฉด Chrome ๋ธŒ๋ผ์šฐ์ €๋ฅผ ํ†ตํ•ด ํฌ๋กค๋ง ์ง„ํ–‰ ์ƒํ™ฉ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

crawler = Instagram("chromedriver", headless=False)

crawl() ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํฌ๋กค๋ง์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋•Œ, ํฌ๋กค๋งํ•˜๊ณ ์ž ํ•˜๋Š” ๊ณ„์ •์˜ ์•„์ด๋””๋ฅผ ์ž…๋ ฅํ•ด์ฃผ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

post_list = crawler.crawl("dsschoolkr")

posts ์˜ต์…˜์„ ์ง€์ •ํ•˜๋ฉด ๊ฐ€์ ธ์˜ค๋ ค๊ณ  ํ•˜๋Š” ๊ฒŒ์‹œ๋ฌผ์˜ ๊ฐœ์ˆ˜๋ฅผ ์กฐ์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์•„๋ž˜์™€ ๊ฐ™์ด posts๋ฅผ 2๋กœ ์ง€์ •ํ•  ๊ฒฝ์šฐ, ํ•ด๋‹น ๊ณ„์ •์˜ ์ œ์ผ ์ตœ๊ทผ ๊ฒŒ์‹œ๋ฌผ ๋‘๊ฐœ์˜ ์ •๋ณด๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

post_list = crawler.crawl("dsschoolkr", posts=2)

๊ฒฐ๊ณผ๊ฐ’์ธ post_list์˜ ํ˜•ํƒœ๋Š” ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

[{'comments': '0',
  'content': '์˜ค๋Š˜๋ฐค(6/9) 8์‹œ ์œ ํŠœ๋ธŒ ์ŠคํŠธ๋ฆฌ๋ฐ์œผ๋กœ ์Šคํƒ€๋ฒ…์Šค 1ํ˜ธ ๋ฐ์ดํ„ฐ์‚ฌ์ด์–ธํ‹ฐ์ŠคํŠธ๊ฐ€ ์ง์—…/์ „๋ง/๋ฐ์ดํ„ฐ์™€ ๊ด€๋ จ๋œ ์งˆ๋ฌธ์— ์ง์ ‘ ๋‹ต๋ณ€๋“œ๋ฆฝ๋‹ˆ๋‹ค :)์ฐธ์—ฌ๋ฐฉ๋ฒ•์€ ํ”„๋กœํ•„ ์„ค๋ช…์„ ํ™•์ธํ•ด์ฃผ์„ธ์š”!',
  'img_src': ['https://scontent-icn1-1.cdninstagram.com/vp/0665d8f0404e266aa84d3d77eb919b56/5DC64220/t51.2885-15/e35/61234597_166094021086395_2911502642251464796_n.jpg?_nc_ht=scontent-icn1-1.cdninstagram.com'],
  'like': '8',
  'post_id': 'ByezZRLBSjV'}]

๋ฆฌ์ŠคํŠธ ๋‚ด์— ๊ฐ๊ฐ์˜ ๊ฒŒ์‹œ๋ฌผ์— ๋Œ€ํ•œ ์ •๋ณด๊ฐ€ ๋”•์…”๋„ˆ๋ฆฌ ํ˜•ํƒœ๋กœ ๋“ค์–ด์žˆ๋Š” ๋ชจ์Šต์ž…๋‹ˆ๋‹ค.

post_id๋Š” ๊ฒŒ์‹œ๋ฌผ์˜ ๊ณ ์œ  id๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. img_src์—๋Š” ์ด๋ฏธ์ง€ ํ˜น์€ ๋™์˜์ƒ์˜ url ์ •๋ณด๊ฐ€ ๋ฆฌ์ŠคํŠธ ํ˜•ํƒœ๋กœ ๋‹ด๊ฒจ์žˆ์œผ๋ฉฐ, content์—๋Š” ๊ฒŒ์‹œ๋ฌผ์— ์ž‘์„ฑ๋œ ๋ฌธ๊ตฌ๊ฐ€ ๋‹ด๊ฒจ์žˆ์Šต๋‹ˆ๋‹ค. like๋Š” ๊ฒŒ์‹œ๋ฌผ ์ข‹์•„์š” ๊ฐœ์ˆ˜, comments๋Š” ๊ฒŒ์‹œ๋ฌผ์— ๋‹ฌ๋ฆฐ ๋Œ“๊ธ€์˜ ๊ฐœ์ˆ˜๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

์•„๋ž˜์˜ ์ฝ”๋“œ๋ฅผ ํ†ตํ•ด ๊ฒฐ๊ณผ๊ฐ’์„ ๋ฐ์ดํ„ฐํ”„๋ ˆ์ž„ ํ˜•์‹์œผ๋กœ ๋ณ€ํ™˜ํ•˜๊ณ  csvํŒŒ์ผ๋กœ ์ €์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

import pandas as pd
data = pd.DataFrame(post_list)
data.to_csv("post.csv")