Hush 2022. 6. 16. 12:27

HTML๋ถ„์„์— ๋Œ€ํ•ด ๋…ผํ•˜๊ธฐ ์ „์—, ์งš๊ณ  ๋„˜์–ด๊ฐˆ ์ฒ ํ•™์ด ์žˆ๋‹ค.

๊ฐœ๋ฐœ์ž์˜ ๋ถ„์„๋ ฅ์„ ๊ณผ์‹œํ•˜๊ธฐ ์ „์—, ์ด ํŽ˜์ด์ง€์˜ HTML์„ ๋ถ„์„ํ•˜๋Š” ๊ฒƒ์ด ์ตœ์„ ์ธ์ง€ ๊ณ ๋ฏผํ•˜๋ผ.

๋” ๋‚˜์€ ๊ตฌ์กฐ๋ฅผ ๊ฐ–์ถ˜ ๋ชจ๋ฐ”์ผ ๋ฒ„์ „ ์‚ฌ์ดํŠธ๊ฐ€ ์žˆ์„ ์ˆ˜๋„ ์žˆ๊ณ ,

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ์— ์ˆจ๊ฒจ์ง„ ์ •๋ณด๊ฐ€ ๋” ์œ ์šฉํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

ํŽ˜์ด์ง€ URL์— ์œ ์šฉํ•œ ์ •๋ณด๊ฐ€ ์ˆจ๊ฒจ์ € ์žˆ์„๋•Œ๋„ ์žˆ๊ณ 

์•„์˜ˆ ๋‹ค๋ฅธ ์›น ์‚ฌ์ดํŠธ๋ฅผ ๋ถ„์„ํ•˜๋Š” ๊ฒƒ์ด ํ˜„๋ช…ํ•œ ๋ฐฉ๋ฒ•์ผ ์ˆ˜๋„ ์žˆ๋‹ค.

 

BeautifulSoup๋ฅผ ํ™œ์šฉํ•˜๋ฉด ํƒœ๊ทธ์™€ ์†์„ฑ๊ฐ’๋“ค๋กœ HTML์„ ๋ถ„์„ํ•  ์ˆ˜ ์žˆ๋‹ค.

์ด๋•Œ ํ•ต์‹ฌ์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๊ฒƒ์ด find์™€ findAll ํ•จ์ˆ˜์ด๋‹ค.

 

find() , findAll() ํ•จ์ˆ˜

BeautifulSoup์—์„œ ๊ฐ€์žฅ ์ž์ฃผ ์“ฐ๋Š” ํ•จ์ˆ˜์ด๋‹ค.

ํŽ˜์ด์ง€์—์„œ ์›ํ•˜๋Š” ํƒœ๊ทธ๋ฅผ ํ•„ํ„ฐ๋งํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

find์™€ findAll ํ•จ์ˆ˜์—์„œ ์ „๋‹ฌํ•  ์ธ์ž๋“ค์€ ๋‹ค์Œ ํ‘œ์™€ ๊ฐ™๋‹ค.(๋Œ€๋ถ€๋ถ„๊ฒฝ์šฐ tag์™€ attributes๋งŒ ์“ธ ๊ฒƒ์ด๋‹ค)

์ข…๋ฅ˜ ์„ค๋ช…
tag ํƒœ๊ทธ ์ด๋ฆ„์ธ ๋ฌธ์ž์—ด์„ ๋„˜๊ธฐ๊ฑฐ๋‚˜, ํƒœ๊ทธ ์ด๋ฆ„์œผ๋กœ ์ด๋ฃจ์–ด์ง„ ํŒŒ์ด์ฌ ๋ฆฌ์ŠคํŠธ๋ฅผ ๋„˜๊ธด๋‹ค.
ex) bs.findAll('h1') , findAll(['h1','h2'])
attributes ์†์„ฑ์œผ๋กœ ์ด๋ฃจ์–ด์ง„ ํŒŒ์ด์ฌ ๋”•์…”๋„ˆ๋ฆฌ๋ฅผ ๋ฐ›๊ณ , ๊ทธ์ค‘ ํ•˜๋‚˜์— ์ผ์น˜ํ•˜๋Š” ํƒœ๊ทธ๋ฅผ ์ฐพ๋Š”๋‹ค.
ex) bs.findAll('span', { 'class' : ['green', 'red']})
recursive ๋ฌธ์„œ์—์„œ ์–ผ๋งˆ๋‚˜ ๊นŠ์ด ์ฐพ์•„ ๋“ค์–ด๊ฐ€๊ณ  ์‹ถ์€์ง€ ์ง€์ •ํ•˜๋Š” ๋ถˆ๋ฆฌ์–ธ์ด๋‹ค.
True๋ฉด ๋งค๊ฐœ๋ณ€์ˆ˜์— ์ผ์น˜ํ•˜๋Š” ํƒœ๊ทธ๋ฅผ ์ฐพ์•„ ์ž์‹, ์ž์‹์˜ ์ž์‹์„ ๊ฒ€์ƒ‰ํ•œ๋‹ค.
False๋ฉด ๋ฌธ์„œ์˜ ์ตœ์ƒ์œ„ ํƒœ๊ทธ๋งŒ ์ฐพ๋Š”๋‹ค.
๊ธฐ๋ณธ๊ฐ’์€ True์ด๊ณ , ์ž˜ ๊ฑด๋“ค์ด์ง€ ์•Š๋Š”๋‹ค.
text ํ…์ŠคํŠธ ์ฝ˜ํ…์ธ ๋กœ ํ•„ํ„ฐ๋งํ•˜๋Š” ์ธ์ž์ด๋‹ค. ํƒœ๊ทธ์— ๋‘˜๋Ÿฌ์‹ธ์ธ ํŠน์ • ํ…์ŠคํŠธ๋ฅผ ์ฐพ์„ ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.
ex)bs.findAll(text='the prince')
limit findAll์—์„œ๋งŒ ์“ฐ๋Š” ์ธ์ž๋กœ, ๊ฒฐ๊ณผ๋ฅผ ๋ช‡ ๊ฐœ ์ฐพ์„๋•Œ ๊นŒ์ง€ ํ•„ํ„ฐ๋ง์„ ๊ณ„์†ํ• ์ง€ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค.
์ฆ‰, findํ•จ์ˆ˜๋Š” findAllํ•จ์ˆ˜์˜ limit์„ 1๋กœ ์„ค์ •ํ•œ ๊ฒƒ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
keyword ํŠน์ • ์†์„ฑ์ด ํฌํ•จ๋œ ํƒœ๊ทธ๋ฅผ ์„ ํƒํ•  ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
attrubutes๋Š” or ํ•„ํ„ฐ์ฒ˜๋Ÿผ ๋™์ž‘ํ–ˆ์ง€๋งŒ keyword ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” andํ•„ํ„ฐ์ฒ˜๋Ÿผ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.
class๋Š” ํŒŒ์ด์ฌ ์˜ˆ์•ฝ์–ด์ด๋ฏ€๋กœ class_ ๋ผ๊ณ  ์ ์–ด์ฃผ์–ด์•ผ ํ•จ์— ์œ ์˜ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.
ex) bs.findAll(id='title', class_='text')

 

ํŠธ๋ฆฌ ์ด๋™

findAll ํ•จ์ˆ˜๋Š” ์ด๋ฆ„๊ณผ ์†์„ฑ์œผ๋กœ ํƒœ๊ทธ๋ฅผ ์ฐพ๋Š”๋‹ค.

ํ•˜์ง€๋งŒ ์ด๊ฒƒ ๋งŒ์œผ๋กœ ์šฐ๋ฆฌ๊ฐ€ ์›ํ•˜๋Š” ์š”์†Œ์— ์ ‘๊ทผํ•˜๋Š” ๊ฒƒ์€ ์‰ฝ์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋‹ค.

html ํŠธ๋ฆฌ ๊ตฌ์กฐ ๋‚ด์—์„œ ํŠน์ • ์ž์‹์š”์†Œ, ํ˜•์ œ์š”์†Œ, ๋ถ€๋ชจ์š”์†Œ์— ์ ‘๊ทผํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž.

 

์ž์‹/์ž์† ๋‹ค๋ฃจ๊ธฐ

์ „ ๊ธ€์˜ ์˜ˆ์ œ์—์„œ ๋ณด์•˜๋“ฏ, ์˜จ์ ์„ ์ฐ๊ณ  ํƒœ๊ทธ๋ฅผ ์ ์–ด์ฃผ๋ฉด ์ž์†์„ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด bs.body.h1์€ body์˜ ์ž์†์ธ ์ฒซ ๋ฒˆ์งธ h1 ํƒœ๊ทธ๋ฅผ ์„ ํƒํ•œ๋‹ค.

๋งˆ์ฐฌ๊ฐ€์ง€๋กœ bs.div.findAll("img")๋Š” ๋ฌธ์„œ์˜ ์ฒซ ๋ฒˆ์งธ div ํƒœ๊ทธ๋ฅผ ์ฐพ๊ณ , ๊ทธ div ํƒœ๊ทธ์˜ ์ž์†์ธ ๋ชจ๋“  img ํƒœ๊ทธ์˜ ๋ชฉ๋ก์„ ๊ฐ€์ ธ์˜จ๋‹ค.

 

๋งŒ์•ฝ ์–ด๋–ค ํƒœ๊ทธ์˜ ์ž์‹๋งŒ์„ ๋‹ค๋ฃจ๊ณ  ์‹ถ๋‹ค๋ฉด .children ์„ ๋ถ™์—ฌ์ฃผ๋ฉด ๋œ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด bs.table.children์€ ์ฒซ ํ…Œ์ด๋ธ” ํƒœ๊ทธ์˜ ์ž์‹๋“ค์„ list_iterator๋กœ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

 

ํ˜•์ œ ๋‹ค๋ฃจ๊ธฐ

.next_sibling ๋˜๋Š” .next_siblings๋ฅผ ํ†ตํ•ด ๋‹ค์Œ ํ˜•์ œ ๋˜๋Š” ๋‹ค์Œ ํ˜•์ œ๋“ค์„ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

next_sibling์€ ํƒœ๊ทธ ๊ฐ์ฒด๋ฅผ, next_siblings๋Š” generator๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

๋‹น์—ฐํžˆ ํƒœ๊ทธ ๊ฐ์ฒด ์ž์‹ ์€ ์ž์‹ ์˜ ํ˜•์ œ๊ฐ€ ์•„๋‹ˆ๋ฏ€๋กœ, ์ž์‹  ๋‹ค์Œ์˜ ๊ฐ์ฒด ๋˜๋Š” ๊ฐ์ฒด๋“ค์ด ์„ ํƒ๋ฉ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด table ํƒœ๊ทธ์—์„œ ์ œ๋ชฉ ์—ด์„ ์ œ์™ธํ•œ ๋‚˜๋จธ์ง€ ์—ด๋“ค์— ์ ‘๊ทผํ•  ๋•Œ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

๋น„์Šทํ•œ ๋งฅ๋ฝ์—์„œ, .previous_sibling ๋˜๋Š” .previous_siblings ๋˜ํ•œ ํ˜•์ œ๊ด€๊ณ„์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

๋ถ€๋ชจ ๋‹ค๋ฃจ๊ธฐ

์•„์ฃผ ๊ฐ€๋”, ๋ถ€๋ชจ๋ฅผ ์ฐพ์•„์•ผ ํ•  ๋•Œ๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

.parent์™€ .parents๋ฅผ ํ†ตํ•ด ๋ถ€๋ชจ๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

parent๋Š” ๋ถ€๋ชจ ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ณ  parents๋Š” ๋ถ€๋ชจ, ๋ถ€๋ชจ์˜ ๋ถ€๋ชจ, ๋ถ€๋ชจ์˜ ๋ถ€๋ชจ์˜ ๋ถ€๋ชจ, ... ๋กœ ๊ตฌ์„ฑ๋œ generator๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.