3週目-8 Web scrapingベース

3111 ワード

キャプチャ(scrapting)>Webページを直接インポートしてデータを抽出
「要求」>「リソースの要求」
BeautifulSoup>の資料をフィルタします.
1)フィルタされた資料を表示する
import requests
from bs4 import BeautifulSoup

//headers는 브라우저에서 엔터친 것과 같은 효과를 내는 것
headers = {'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'}
//data를 요청해서 갖고오기
data = requests.get('https://movie.naver.com/movie/sdb/rank/rmovie.nhn?sel=pnt&date=20200303',headers=headers)

//data의 정보를 솎아내기 좋게 BeautifulSoup형태로 만들어서 나타내기
soup = BeautifulSoup(data.text, 'html.parser')

print(soup)  >>html 코드자료가 좌르륵 나옴
2)選別した資料に必要な値のみ表示する
**見出しにカーソルを合わせ、「チェック」ウィンドウ>「要素」>「部分コピーセレクタ」>「スープ」を開きます.select.かっこ1("")に貼り付け
title = soup.select_one('#old_content > table > tbody > tr:nth-child(2) > td.title > div > a')

1-print(title) //해당 title값 가져오기
2-print(title.text) //해당 텍스트값만 가져오기
3-print(title['href']) //해당 속성값만 가져오기
結果値>
1-<*a href="/movi/mi/basic.naver?code=171539"title="緑皮書">緑皮書//グリーンブック
2-グリーンブック
3-/movie/bi/mi/basic.naver?code=171539
3)全ての資料を収集して選別する
ページタイトルで、カーソル後の要素の行がどこにあるかを検証し、copy selector>2回選択して貼り付けます.

#old_content > table > tbody > tr:nth-child(2)
#old_content > table > tbody > tr:nth-child(3)
他の部分は数字なのでよく見ると
:nth-child(数字)>>この部分を特定の部分で消すと、資料全体がロードできることを意味します!!!
#old content>table>tbody>trだけを残します!
異なるtrsを指定し、複数の情報があるのでselectを使います!
trs = soup.select('#old_content > table > tbody > tr')

for tr in trs: //trs정보를 tr에 담는다
    print(tr) // tr정보만 다 나온다
3)選別した情報からテーマを抽出する
해당 제목부분 copy selector 후 붙여넣기
#old_content > table > tbody > tr:nth-child(2) > td.title > div > a
여기서!!
 *td.title > div > a // 이 부분만 잘라내주기
 
 
 
 for tr in trs:
 	//a_tag을 한 부분으로 지정하므로selcet_one사용하여 ('')안에 붙여넣어주기
    a_tag = tr.select_one('td.title > div > a')
    print(a_tag)
結果値>
このようにこの画面のtrにはtitle値しか現れません!!
グリーンブック
期限切れ
BUT ! 真ん中に空の値noneがある場合、値をエクスポートできません.if文を使用します.
印刷(atag.text)すると、none値にtextを適用しないでくださいというエラーメッセージが表示されます.
If文の例none値の除外
for tr in trs:
    a_tag = tr.select_one('td.title > div > a')
    if a_tag is not None:
        print(a_tag)
今回はtitleのテキスト値のみ抽出
for tr in trs:
    a_tag = tr.select_one('td.title > div > a')
    if a_tag is not None:
        title = a_tag.text //text값 지정
        print(title)
結果値>
グリーンブック
加百農
ベリーゲイン
主戦場