ショートビデオの人気により、人々に娯楽をもたらすだけでなく、ホットなニュース、時事問題、さまざまな知識をもたらすことができ、ショートビデオは徐々に日常生活の一部になっています。本
この記事では、簡単な例を使用して、学習と共有のみを目的としたSeleniumに依存するPyhtonを介して短い動画をクロールする方法を簡単に説明します。欠点がある場合は、修正してください。
知識ポイントを含む
クローラーについては、次のような知識ポイントが含まれます。
•Seleniumは、ブラウザー側の自動テストツールとして、ブラウザーを操作しているユーザーと同じように、ブラウザーを操作しているユーザーのアクションをシミュレートできます。セレンに関する具体的な情報は次のとおりです
◦Seleniumは、主にID、Name、ClassName、Css Selector、Partial LinkText、LinkText、XPath、TagNameなどの8つの方法で要素の配置を実行します。
◦Seleniumには、単一の要素(例:find_element)と要素の配列(例:find_elements)を取得する2つの方法があります。
◦Selenium要素が配置された後、要素に値を割り当てて取得したり、対応するイベント操作(クリックなど)を実行したりできます。
•requests、web requestオブジェクト、ビデオのURLがseleniumを介して取得された後、ビデオストリームはrequestsライブラリを介して取得され、ローカルビデオファイルとして保存されます。
•ブラウザ開発ツール。これを使用して、ページ上のボタンやリンクなどのページ要素に対応するhtmlロゴを表示できます。
ターゲット分析
ビデオをクロールする前に、ターゲット構造を分析する必要があります。このビデオクロール分析は、次の3つのステップに分けることができます。
1.ホットリストを分析します
ホットリストディレクトリはulタグであり、各ホットリストオブジェクトにはliサブタグがあり、人気やタイトルなどのコンテンツが含まれています。タイトルリンクをクリックして、特定のビデオ再生ページに入ります。
ターゲット分析は次のようになります。
2.ビデオ再生ページを分析します
ビデオはビデオタグで再生されます。短いビデオ再生の実際のアドレスはビデオのソースサブタグにあり、再生品質を確保するために、ビデオの下に3つのソースがあります。
それらの1つを取る
3.分析ポップアップ
クロールプロセス中に、ログインする必要のあるウィンドウがポップアップした後、時間内に閉じる必要があります。そうしないと、ページ要素が見つからず、クロールが失敗する可能性があります。次のように:
コアコード
上記の分析の後、クローラーコードを記述できます。
1.ホットスポットディレクトリをトラバースします
ページ上の対応する情報を取得することにより、以下に示すように、ホットビデオのディレクトリが解析されます。
Python学习交流Q群;906715085###
self.__driver.get(self.__url)
self.close_popup_window()
#4. 最大化窗口
self.__driver.maximize_window()
time.sleep(self.__wait_sec)
#打开以后,根据class=BHgRhxNh获取ul下的li
if self.checkIsExistsByClass(cls='BHgRhxNh'):
#获取
hots = self.__driver.find_elements(by=By.CLASS_NAME, value='BHgRhxNh')
hot_infos = []
index = 0
for hot in hots:
hot_info = {
}
a = hot.find_element(by=By.TAG_NAME, value='a')
href = a.get_attribute("href")
text = a.text
hot_info['url'] = href
hot_info['text'] = text
if index > 0:
div = hot.find_element(by=By.CLASS_NAME, value='GsuT_hjh')
if div is not None:
hot_value = div.find_element(by=By.TAG_NAME, value='span').text
hot_info['value'] = hot_value
hot_infos.append(hot_info)
index = index + 1 print(hot_infos)
2.実際の短いビデオURLを取得します
以下に示すように、単一のホットビデオのURLを開き、実際の短いビデオ再生URLを解析します。
python 学习交流Q群:906715085###
def open_video_html(self, url):
"""打开具体视频的页面"""
self.__driver.get(url=url)
time.sleep(1)
self.close_popup_window() # 关闭弹窗
video = self.__driver.find_element(by=By.TAG_NAME, value='video')
source = video.find_element(by=By.TAG_NAME, value='source')
src = source.get_attribute('src')
return src
3.ビデオをダウンロードする
実際のURLを取得したら、次のようにダウンロードできます。
def download_video(self, url, video_name):
"""根据视频源地址进行下载"""
if os.path.exists(video_name):
# 如果已重新下载过,则不需要再次下载
return
else:
with open(video_name, 'wb') as fp:
fp.write(requests.get(url).content)
4.ポップアップログインウィンドウを閉じます
クロールプロセス中に、ログインする必要のあるマスクウィンドウが頻繁にポップアップし、以下に示すように閉じる必要があります。
Python学习交流Q群:906715085####
def close_popup_window(self):
try:
login = self.__driver.find_element(by=By.ID, value='login-pannel')
if login is not None:
login.find_element(by=By.CLASS_NAME, value='dy-account-close').click()
except BaseException as e:
pass
try:
login = self.__driver.find_element(by=By.CLASS_NAME, value='GaDkStRD')
if login is not None:
btns = login.find_elements(by=By.TAG_NAME, value='button')
for btn in btns:
if btn.text == '取消':
btn.click()
break
except BaseException as e:
pass
5.ログを保存します
クロールが成功したら、以下に示すように、クロールされた短いビデオの関連コンテンツを保存します。
def save_data(self, hot_infos):
"""
保存数据
:param res_list: 保存的内容文件
:return:
"""
t = time.strftime("%Y-%m-%d", time.localtime())
with open(f'logs[{
t}].json', 'a', encoding='utf-8') as f:
res_list_json = json.dumps(hot_infos, ensure_ascii=False)
f.write(res_list_json)
サンプルスクリーンショット
プログラム開発が完了した後の実行例は次のとおりです。
クロールされたビデオは、次のようにダウンロードディレクトリに保存されます。
要約する
リクエストライブラリを直接使用するのではなく、なぜセレンを使用してこの短いビデオをクロールするのですか?理由は次のとおりです。
1.ターゲットWebサイトを分析する過程で、ターゲットWebサイトが非同期呼び出しを使用してデータを取得していることがわかりました。つまり、URL要求は空のシェルのみであり、実際のデータはありません。
2.非同期インターフェースによって呼び出されるURLを分析すると、多くのインターフェースのURLには、トークンやタイムスタンプなどの適時性と妥当性の検証があり、構築が非常に面倒であることがわかります。
上記の2つの理由と、セレンの特性と利点を組み合わせることで、セレンは最終的にこのクローラーに最適な選択肢になります。