[PROD JECT]Kakao Friends Shopクローンコード-#02 Webスクロール読みWebキャプチャと書く!


この文章を完成したり、スクロールファイルを作成したり、完成段階の状態で

著作権の問題でスクロール禁止!


こんな話を聞く.
心の片隅で知っていたけど...チームのメンターに聞いたことがありますが、Kakao Friends Shopというのは、KakaoキャラクターがKakao Friends Shopのコアクリエイティブなので、スクロールしないわけにはいきません.(だからこの言葉を聞いて)ダメだと分かっていたのですが、頑張っていきました…
とりあえず、今日のタグスクロールファイルは完成したようです.
KACAロールやカテゴリによるスクロールファイルはまだ完成していないようです.
しかし、私はほとんどできました.私はどのようにスクロールするかを決めたので、より多くのコードを書くことができませんでした.
欲しい人が持ってきて...コードを何行か書いて、完成したらまた回してください.はい.
これはオープンソースですか...九麗
とにかく、私が以前実习した方法と私の知らない方法でweb scraping试してみます!
(python)xpathを使用してSeleniumをスクロール
Web Scraping using Selenium and Python

基本的に使うライブラリはBeautifulSoup 4 Selenium!


以前はfind_element_by_css_selectorしか使用されていなかったので、ページはダイナミックです.
1ページで、カテゴリの個数で各カテゴリ内の飲料のサムネイルと名前の実習を取得します.
今回は、html要素の属性をWebElementメソッドで取得する方法get_attributeがよく見られます.
xpathfind_element_by_xpathメソッドを使用します.
複数ページの間を自由に移動し、ボタンをクリックします.
開発がいつものように、転がる世界は想像以上に膨大で、不思議な方法がたくさんあって、やっているうちに本当に面白くなりました.
(実は、水曜日を基準にして、これ以上転がることはできませんが、続けたいカエルの心がありました.もちろんできません)
その後、検索する値を入力したり、ボタンをクリックしたり、ページを移動したりするなど、スクロール操作も行います.
彼はプロジェクトの進行中にスクロールを主な内容にすることはできないが、奇妙にスクロールの魅力に陥ったと言った.

ホームページで「今日」タブを切り取ります


from bs4 import BeautifulSoup
from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager

import csv
import time

#1. csv file open
csv_name = "main_today.csv"
csv_open = open(csv_name, "w+", encoding="utf-8")
csv_writer = csv.writer(csv_open)
csv_writer.writerow(("profile_image", "name", "display_date", "image", "like_count", "title", "sub_copy"))


#2. Driver & BeautifulSoup
driver = webdriver.Chrome(ChromeDriverManager().install())

crawling_url = "https://store.kakaofriends.com/kr/index?tab=today"
driver.get(crawling_url)


#3. Parsing html code
full_html = driver.page_source
soup = BeautifulSoup(full_html, 'html.parser')
time.sleep(2)


#4. Get element selector (1)
articles = soup.select('#mArticle > main > div.today__Wrap-sc-1gh0i9h-0.fCbncI > article') 

#5. Get element selector (2)
for i in range(1, len(articles)+1):
    profile_image   = driver.find_element_by_css_selector(f'#mArticle > main > div.today__Wrap-sc-1gh0i9h-0.fCbncI > article:nth-child({i}) > section.header__Wrap-sc-1uyrtg9-0.hXrGqX > div.header__ImageWrap-sc-1uyrtg9-1.kmIBex > img')
    name            = driver.find_element_by_css_selector(f'#mArticle > main > div.today__Wrap-sc-1gh0i9h-0.fCbncI > article:nth-child({i}) > section.header__Wrap-sc-1uyrtg9-0.hXrGqX > div:nth-child(2) > p')
    display_date    = driver.find_element_by_css_selector(f'#mArticle > main > div.today__Wrap-sc-1gh0i9h-0.fCbncI > article:nth-child({i}) > section.header__Wrap-sc-1uyrtg9-0.hXrGqX > div:nth-child(2) > div > span.header__DisplayDate-sc-1uyrtg9-7.bbyqry')
    like_count      = driver.find_element_by_css_selector(f'#mArticle > main > div.today__Wrap-sc-1gh0i9h-0.fCbncI > article:nth-child({i}) > section:nth-child(2) > div.contents__LikeCountWrap-sc-1b0iw5u-2.fDHkJk > span > span > span')
    title           = driver.find_element_by_css_selector(f'#mArticle > main > div.today__Wrap-sc-1gh0i9h-0.fCbncI > article:nth-child({i}) > section:nth-child(2) > p')
    sub_copy        = driver.find_element_by_css_selector(f'#mArticle > main > div.today__Wrap-sc-1gh0i9h-0.fCbncI > article:nth-child({i}) > section:nth-child(2) > div.contents__SubCopy-sc-1b0iw5u-6.dLrCHR')

    images = soup.select(f'#mArticle > main > div.today__Wrap-sc-1gh0i9h-0.fCbncI > article:nth-child({i}) > section:nth-child(2) > div.media-slider__Wrap-bw8abp-0.ksgZQS > div > div > div')
    
    #6. Get image url
    for j in range(1, len(images)+1):
        image = driver.find_element_by_css_selector(f'#mArticle > main > div.today__Wrap-sc-1gh0i9h-0.fCbncI > article:nth-child({i}) > section:nth-child(2) > div.media-slider__Wrap-bw8abp-0.ksgZQS > div > div > div:nth-child({j}) > div > div > img')

        img_url = image.get_attribute('src')

        #7. Create csv file    
        if i == 0:
                csv_writer.writerow((profile_image.get_attribute('src'), name.text, display_date.text, img_url, like_count.text, title.text, sub_copy.text))
        else:
            csv_writer.writerow((profile_image.get_attribute('src'), name.text, display_date.text, img_url, like_count.text, title.text, sub_copy.text))

ロールに関連するコンテンツの消去


1.キャラクターサムネイル、名前スクロール


import csv
import time

from bs4 import BeautifulSoup
from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager

#1. csv file open
csv_name = "character_type.csv"
csv_open = open(csv_name, "w+", encoding='utf-8')
csv_writer = csv.writer(csv_open)
csv_writer.writerow(('categorySeq','name')) 

#2. Driver & BeautifulSoup 
driver = webdriver.Chrome(ChromeDriverManager().install())

org_crawling_url = "https://store.kakaofriends.com/kr/index?tab=today"
driver.get(org_crawling_url)

#3. Parsing html code
full_html = driver.page_source
soup = BeautifulSoup(full_html, 'html.parser')

time.sleep(3)

#4. Get element selector (1)
hamburger_button    = driver.find_element_by_xpath('//*[@id="innerHead"]/div/button[2]').click()
time.sleep(2)
char_button         = driver.find_element_by_xpath('/html/body/div[6]/div/div/div/ul/li[3]/button').click()
time.sleep(2)
#char                = soup.selector(f'body > div:nth-child(7) > div > div > div > ul > li:nth-child(3) > ul > li > a')
char         = driver.find_elements_by_xpath('/html/body/div[6]/div/div/div/ul/li[3]/ul/li/a')

for i in char:
    character = i.get_attribute('href').split("categorySeq=",1)[1]
    name = i.text
    
    csv_writer.writerow((character, name))

driver.quit()

2.ロールごとにカタログをまとめる


import csv
import time

from bs4 import BeautifulSoup
from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager

#1. csv file open
csv_name = "character.csv"
csv_open = open(csv_name, "w+", encoding='utf-8')
csv_writer = csv.writer(csv_open)
csv_writer.writerow(('categorySeq','name')) 

#2. Driver & BeautifulSoup 
driver = webdriver.Chrome(ChromeDriverManager().install())

org_crawling_url = "https://store.kakaofriends.com/kr/index?tab=today"
driver.get(org_crawling_url)

#3. Parsing html code
full_html = driver.page_source
soup = BeautifulSoup(full_html, 'html.parser')
time.sleep(3)

#4. Get element selector 
#4-1. Get character list
hamburger_button    = driver.find_element_by_xpath('//*[@id="innerHead"]/div/button[2]').click()
time.sleep(2)
char_button         = driver.find_element_by_xpath('/html/body/div[6]/div/div/div/ul/li[3]/button').click()
time.sleep(2)
char                = driver.find_elements_by_xpath('/html/body/div[6]/div/div/div/ul/li[3]/ul/li/a')

char_list = []
for i in char:
    character = i.get_attribute('href').split("categorySeq=",1)[1]
    char_list.append(character)

#4-2. Get Product_num from main view
product_num = []        
for seq in char_list:
    url1 = "https://store.kakaofriends.com/kr/products/category/character?categorySeq="+ seq +"&sort=createDatetime,desc"
    driver.get(url1)
    full_html = driver.page_source
    soup = BeautifulSoup(full_html, 'html.parser')

    product_num += driver.find_elements_by_xpath('//*[@id="mArticle"]/div[3]/ul/li/a').get_attribute('href').split("products/",1)[1]   

print(product_num) 
    
    
    ㅁㅣ완성 area
    
    
#csv_writer.writerow((character, name))

#driver.quit()
各キャラクターの商品詳細照会結果は、各カテゴリの商品詳細照会画面と同じです.
カテゴリに直接移動しました.

カテゴリに関連するコンテンツの消去


1.カテゴリリストのスクロール


import csv
import time

from bs4 import BeautifulSoup
from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager

#1. csv file open
csv_name = "type.csv"
csv_open = open(csv_name, "w+", encoding='utf-8')
csv_writer = csv.writer(csv_open)
csv_writer.writerow(('categorySeq','name')) 

#2. Driver & BeautifulSoup 
driver = webdriver.Chrome(ChromeDriverManager().install())

org_crawling_url = "https://store.kakaofriends.com/kr/index?tab=today"
driver.get(org_crawling_url)

#3. Parsing html code
full_html = driver.page_source
soup = BeautifulSoup(full_html, 'html.parser')

time.sleep(3)

#4. Get element selector
hamburger_button    = driver.find_element_by_xpath('//*[@id="innerHead"]/div/button[2]').click()
time.sleep(2)
char_button         = driver.find_element_by_xpath('/html/body/div[6]/div/div/div/ul/li[4]/button').click()
time.sleep(2)
#char                = soup.selector(f'body > div:nth-child(7) > div > div > div > ul > li:nth-child(3) > ul > li > a')
char         = driver.find_elements_by_xpath('/html/body/div[6]/div/div/div/ul/li[4]/ul/li/a')

del char[0]
for i in char:
    categorySeq = i.get_attribute('href').split("categorySeq=",1)[1]
    name        = i.text
    
    csv_writer.writerow((categorySeq, name))
driver.quit()

2.商品詳細照会スクロール



商品カタログごとに商品idとサムネイルを抽出したいと思っていました.

よく考えてみると、詳しく調べたときに出てくる1枚目の写真=サムネイルなので
各カテゴリの商品総数とidを抽出し、抽出した商品のすべてのリストを繰り返し、urlの後半を変更するだけで、詳細検索ページ内の情報をスクロールできます.
import csv
import time

from bs4 import BeautifulSoup
from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager

#1. csv file open
csv_name = "category_all.csv"
csv_open = open(csv_name, "w+", encoding='utf-8')
csv_writer = csv.writer(csv_open)
csv_writer.writerow(('product_id','sub_category','content_name','price')) 

#2. Driver & BeautifulSoup 
driver = webdriver.Chrome(ChromeDriverManager().install())

org_crawling_url = "https://store.kakaofriends.com/kr/index?tab=today"
driver.get(org_crawling_url)

#3. Parsing html code
full_html = driver.page_source
soup = BeautifulSoup(full_html, 'html.parser')
time.sleep(3)

#4. Get element selector
#4-1. Get category list
hamburger_button    = driver.find_element_by_xpath('//*[@id="innerHead"]/div/button[2]').click()
time.sleep(3)
category_button     = driver.find_element_by_xpath('/html/body/div[6]/div/div/div/ul/li[4]/button').click()
time.sleep(3)
category            = driver.find_elements_by_xpath('/html/body/div[6]/div/div/div/ul/li[4]/ul/li/a')

del category[0]

category_list = []
for i in category:
    categorySeq = i.get_attribute('href').split("categorySeq=",1)[1]
    category_list.append(categorySeq)

#4-2. Get Product_num from main view
url1 = "https://store.kakaofriends.com/kr/products/category/subject?sort=createDatetime,desc"
driver.get(url1)
full_html   = driver.page_source
soup        = BeautifulSoup(full_html, 'html.parser')
time.sleep(3)

products = driver.find_elements_by_xpath('//*[@id="mArticle"]/div[3]/ul/li/a')

product_num = []      
for i in products:
    p_code = i.get_attribute('href').split("products/")[1]
    product_num.append(p_code)

#4-3. Get Product_detail from detail view
for i in product_num:
    url2        = "https://store.kakaofriends.com/kr/products/"+i
    driver.get(url2)
    full_html   = driver.page_source
    soup        = BeautifulSoup(full_html, 'html.parser')
    time.sleep(3) 
    
    script_text = driver.find_element_by_xpath("/html/body/script[2]").get_attribute('innerHTML')
    ### 이쯤부터 미완이었던거같다,....? ###
    print(script_text[script_text.find('{')-1 : script_text.find('}')+1])

#print(script_text)

#csv_writer.writerow(('product_id','sub_category','content_name','price'))
#driver.quit()
ちなみに、Kaka Friends Shopは開発者ツールelementsTabで商品情報を知ることができます.

一般的には安全上の問題で皆さんに見せたくないのは、内容が重要ではないからかもしれません.
あなたのおかげで、私はscriptでこの商品に関する情報をより簡単に抽出することができます.script_text変数はこの部分です!!
これが体験の日…!!なんだ.これら.👇🏻👇🏻👇🏻
  • xpath,css selector使用方法
  • web element|どのように加工しますか?
  • スクロールのために情報を準備している場合は、収集できない情報はありません
  • 私は夜明けにこのすべてを終わらせるように燃えていますが.
    翌朝は転がり禁止の音が...すべての意志を失った...だから残りは完成しなかった...私のコード...
    使うなら誰かが持ってきて使いましょう.(一撃)
    上のコードが終わると完成しますははは