NAVERビデオの結果を調査してください
27288 ワード
スクラップ
必要条件
CSSセレクタによる基礎知識の抽出
あなたがCSSセレクタで掻き取られないならば、私のものの専用のブログ柱はありますhow to use CSS selectors when web-scraping それは、それが何であるかについて、賛否両論をカバーします、そして、なぜ、彼らがウェブを削っている展望から重要である理由.
CSS
セレクターは、マークアップのどの部分がスタイルを適用するかを宣言し、タグと属性のマッチングからデータを取り出すことができます.個別仮想環境
あなたが以前に仮想環境で働いていないならば、専用を見てくださいPython virtual environments tutorial using Virtualenv and Poetry お馴染みのブログ記事.
要するに、それは、それぞれと共存することができる異なるPythonバージョンを含むインストールされたライブラリの独立したセットを作成するものです
このようにしてライブラリやPythonのバージョンの競合を防止します.
📌注:これはむしろ、このブログ記事の厳しい要件ではありません.
ライブラリをインストール
pip install requests, parsel
ブロックされる機会を減らすリクエストがブロックされる可能性があります.見るhow to reduce the chance of being blocked while web-scraping , ほとんどのウェブサイトからブロックをバイパスする11の方法があります.
フルコード
import requests, os, json
from parsel import Selector
def parsel_scrape_naver_videos():
params = {
"query": "minecraft", # search query
"where": "video" # video results
}
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.87 Safari/537.36",
}
html = requests.get("https://search.naver.com/search.naver", params=params, headers=headers, timeout=30)
selector = Selector(html.text) # very similar to bs4, except parsel supports Xpath
video_results = []
for video in selector.css(".video_bx"):
# https://parsel.readthedocs.io/en/latest/usage.html#using-selectors
title = video.css(".text::text").get()
link = video.css(".info_title::attr(href)").get()
thumbnail = video.css(".thumb_area img::attr(src)").get()
channel = video.css(".channel::text").get()
origin = video.css(".origin::text").get()
video_duration = video.css(".time::text").get()
views = video.css(".desc_group .desc:nth-child(1)::text").get()
date_published = video.css(".desc_group .desc:nth-child(2)::text").get()
video_results.append({
"title": title,
"link": link,
"thumbnail": thumbnail,
"channel": channel,
"origin": origin,
"video_duration": video_duration,
"views": views,
"date_published": date_published
})
print(json.dumps(video_results, indent=2, ensure_ascii=False))
検索クエリパラメータとリクエストヘッダを渡します.def parsel_scrape_naver_videos():
# https://docs.python-requests.org/en/master/user/quickstart/#passing-parameters-in-urls
params = {
"query": "minecraft", # search query
"where": "video" # video results
}
# https://docs.python-requests.org/en/master/user/quickstart/#custom-headers
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.87 Safari/537.36",
}
URLパラメータ、リクエストヘッダを渡し、リクエストを行い、parsel
:html = requests.get("https://search.naver.com/search.naver", params=params, headers=headers, timeout=30)
selector = Selector(html.text) # very similar to bs4, except parsel supports Xpath
一時作成list
データを格納し、すべてのデータを展開するには、次の手順に従います.video_results = []
# https://parsel.readthedocs.io/en/latest/usage.html#using-selectors
for video in selector.css(".video_bx"):
title = video.css(".text::text").get()
link = video.css(".info_title::attr(href)").get()
thumbnail = video.css(".thumb_area img::attr(src)").get()
channel = video.css(".channel::text").get()
origin = video.css(".origin::text").get()
video_duration = video.css(".time::text").get()
views = video.css(".desc_group .desc:nth-child(1)::text").get()
date_published = video.css(".desc_group .desc:nth-child(2)::text").get()
コード解説
::text
or ::attr(attribute)
テキストまたはattriubte値をノードから抽出します.
get()
実際のデータを取得するには
データを出力します.
# ensure_ascii=False to properly display Hangul characters
print(json.dumps(video_results, indent=2, ensure_ascii=False))
返されるデータの一部[
{
"title": " : 🌲 How to build Survival Wooden Base (#3)",
"link": "https://www.youtube.com/watch?v=n6crYM0D4DI",
"thumbnail": "https://search.pstatic.net/common/?src=https%3A%2F%2Fi.ytimg.com%2Fvi%2Fn6crYM0D4DI%2Fmqdefault.jpg&type=ac612_350",
"channel": "소피 Sopypie",
"origin": "Youtube",
"video_duration": "24:06",
"views": "671",
"date_published": "4일 전"
},
{
"title": "마인크래프트 무한순환 이론 (",
"link": "https://www.youtube.com/watch?v=kQ7wyG9mShQ",
"thumbnail": "https://search.pstatic.net/common/?src=https%3A%2F%2Fi.ytimg.com%2Fvi%2FkQ7wyG9mShQ%2Fmqdefault.jpg&type=ac612_350",
"channel": "TV블루위키",
"origin": "Youtube",
"video_duration": "01:44",
"views": "9만",
"date_published": "2022.02.15."
} ... other results
]
また、使用して同じことを達成することができますNaver Video Results API 無料の計画で支払われたAPIであるSerpapiから.違いは、ゼロからパーサーを作成して、それを維持して、ブロックされることなくそれを縮める方法を理解する必要がないということです.
import os
from serpapi import NaverSearch
def serpapi_scrape_naver_videos():
params = {
"api_key": os.getenv("API_KEY"), # your serpapi api key
"engine": "naver", # parsing engine
"query": "minecraft", # search query
"where": "video" # video results
}
search = NaverSearch(params) # where data extraction happens
results = search.get_dict() # JSON -> Python dictionary
video_results = []
# iterate over video results and extract desired data
for video in results["video_results"]:
video_results.append({
"title": video["title"],
"link": video["link"],
"duration": video["duration"],
"views": video.get("views"),
"pub_date": video.get("publish_date"),
"thumbnail": video["thumbnail"],
"channel_name": video.get("channel", {}).get("name"),
"channel_link": video.get("channel", {}).get("link")
})
print(json.dumps(video_results, indent=2, ensure_ascii=False))
返されるデータの一部[
{
"title": "Minecraft : 🌲 How to build Survival Wooden Base (#3)",
"link": "https://www.youtube.com/watch?v=n6crYM0D4DI",
"duration": "24:06",
"views": "671",
"pub_date": "4일 전",
"thumbnail": "https://search.pstatic.net/common/?src=https%3A%2F%2Fi.ytimg.com%2Fvi%2Fn6crYM0D4DI%2Fmqdefault.jpg&type=ac612_350",
"channel_name": "소피 Sopypie",
"channel_link": "https://www.youtube.com/channel/UCCuuRWM5JTvYBnbufwJ4E5Q"
},
{
"title": "마인크래프트 무한순환 이론 (Minecraft) [블루위키]",
"link": "https://www.youtube.com/watch?v=kQ7wyG9mShQ",
"duration": "01:44",
"views": "9만",
"pub_date": "2022.02.15.",
"thumbnail": "https://search.pstatic.net/common/?src=https%3A%2F%2Fi.ytimg.com%2Fvi%2FkQ7wyG9mShQ%2Fmqdefault.jpg&type=ac612_350",
"channel_name": "TV블루위키",
"channel_link": "https://www.youtube.com/channel/UCQreDC73rqiw1wSc_ZYwgHA"
} ... other results
]
リンク
アウトロ
何か質問、提案、または正しく動作していない何かを共有する何かを持っている場合は、Twitter経由で、またはを手を伸ばす.
あなたの、dmitriy、残りのserpapiチーム.
我々に加わってください
加えるFeature Request 💫 またはBug 🐞
Reference
この問題について(NAVERビデオの結果を調査してください), 我々は、より多くの情報をここで見つけました https://dev.to/dmitryzub/scrape-naver-video-results-in-python-1c34テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol