Python에서 네이버 동영상 결과 긁기
27596 단어 programmingwebscrapingpythontutorial
스크랩 할 것
전제 조건
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 매개변수를 전달하고, 헤더를 요청하고, 요청을 만들고, 반환된 HTML을
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)
노드에서 텍스트 또는 속성 값을 추출합니다.
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
]
또는 무료 플랜이 포함된 유료 API인 SerpApi의 Naver Video Results API을 사용하여 동일한 결과를 얻을 수 있습니다.
차이점은 처음부터 파서를 생성하고 유지 관리하며 차단되지 않고 확장하는 방법을 알아낼 필요가 없다는 것입니다.
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
이 문제에 관하여(Python에서 네이버 동영상 결과 긁기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/dmitryzub/scrape-naver-video-results-in-python-1c34텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)