Seleniumを使って微博爬虫類を実現します。
前言
CSDNでの最初の文章は、2年ぶりにマイクロブログに登る自由が実現しました。本稿では、マイクロブログの事前登録、「全文展開」を識別し、完全なデータを取得し、ページをめくる設定などの問題を解決することができる。爬虫類に接触したばかりなので、一部の用語は正しくないかもしれません。ご指摘ください。
一、動的爬虫類と静的爬虫類を区別する
1、静的ホームページ
静的なウェブページは純粋なHTMLで、バックグラウンドのデータベースがなくて、プログラムをくわえないで、インタラクションすることができなくて、体の量はより少なくて、スピードをロードするのは速いです。静的なウェブページの取得には、要求を送信し、対応するコンテンツを取得し、解析内容とデータを保存する4つのステップが必要です。
2、ダイナミックページ
ダイナミックウェブページのデータは時間とユーザーのインタラクションによって変化しますので、データは直接ホームページのソースコードに現れません。データはJsonの形式で保存されます。したがって、動的ページは、静的ページよりも1ステップ多くなり、関連データをレンダリングする必要があります。
3、静的なページを区別する方法
ウェブページをロードした後、右ボタンをクリックして、「ウェブページのソースコードを確認する」を選択してください。ウェブページのほとんどのフィールドにソースコードが表示されている場合、これは静的なウェブページです。そうでなければ、ダイナミックなウェブページです。
二、動態爬虫の二つの方法
1.逆方向分析によるダイナミックページの登用
スケジューリングリソースに対応するURLに適用されるデータはJson形式であり、Javascriptのトリガ・スケジュールである。主なステップは、スケジューリングされたリソースが必要とされる対応するアドレス・アクセス・アドレスを取得するためのデータを取得することである(ここは詳しく説明しません。
2.Seleniumライブラリを使って動的ページを登る
Seleniumライブラリを使って、JavaScriptを使って実際のユーザーをシミュレーションしてブラウザを操作します。このケースはこの方法を使用します。
三、Seleniumライブラリの設置とブラウザのパッチのダウンロード
1.Seleniumライブラリはpipツールでインストールすればいいです。
2.Chromeブラウザのバージョンにマッチするブラウザのパッチをダウンロードします。
Step 1:Chromeのバージョンを見る
Step 2:該当バージョンのブラウザパッチをダウンロードします。URL:http://npm.taobao.org/mirrors/chromedriver/
Step 3:ファイルを解凍し、python.exeと同じファイルの下に置く
四、ページの開きと事前登録
1.seleniumバッグの導入
4.事前登録が完了したら、個人のホームページに入ります。
五、キーワード検索操作
1.上の図のキーワード入力ボックスを位置づけ、ボックスに検索対象を入力し、例えば「一生懸命勉強する」
3.スイッチを使うト.window()方法シフト
1.各要素のSelectorを理解し、位置を決める(一意の標識性に重点がある)
2.Selectorで元素を位置決めし、該当データを取得する
1.forサイクルを使ってページをめくることを実現します。ポイントは「次のページ」ボタンを識別してクリックすることです。
1.DataFrameを使ってフィールドを保存する
2.Excelにエクスポート
CSDNでの最初の文章は、2年ぶりにマイクロブログに登る自由が実現しました。本稿では、マイクロブログの事前登録、「全文展開」を識別し、完全なデータを取得し、ページをめくる設定などの問題を解決することができる。爬虫類に接触したばかりなので、一部の用語は正しくないかもしれません。ご指摘ください。
一、動的爬虫類と静的爬虫類を区別する
1、静的ホームページ
静的なウェブページは純粋なHTMLで、バックグラウンドのデータベースがなくて、プログラムをくわえないで、インタラクションすることができなくて、体の量はより少なくて、スピードをロードするのは速いです。静的なウェブページの取得には、要求を送信し、対応するコンテンツを取得し、解析内容とデータを保存する4つのステップが必要です。
2、ダイナミックページ
ダイナミックウェブページのデータは時間とユーザーのインタラクションによって変化しますので、データは直接ホームページのソースコードに現れません。データはJsonの形式で保存されます。したがって、動的ページは、静的ページよりも1ステップ多くなり、関連データをレンダリングする必要があります。
3、静的なページを区別する方法
ウェブページをロードした後、右ボタンをクリックして、「ウェブページのソースコードを確認する」を選択してください。ウェブページのほとんどのフィールドにソースコードが表示されている場合、これは静的なウェブページです。そうでなければ、ダイナミックなウェブページです。
二、動態爬虫の二つの方法
1.逆方向分析によるダイナミックページの登用
スケジューリングリソースに対応するURLに適用されるデータはJson形式であり、Javascriptのトリガ・スケジュールである。主なステップは、スケジューリングされたリソースが必要とされる対応するアドレス・アクセス・アドレスを取得するためのデータを取得することである(ここは詳しく説明しません。
2.Seleniumライブラリを使って動的ページを登る
Seleniumライブラリを使って、JavaScriptを使って実際のユーザーをシミュレーションしてブラウザを操作します。このケースはこの方法を使用します。
三、Seleniumライブラリの設置とブラウザのパッチのダウンロード
1.Seleniumライブラリはpipツールでインストールすればいいです。
2.Chromeブラウザのバージョンにマッチするブラウザのパッチをダウンロードします。
Step 1:Chromeのバージョンを見る
Step 2:該当バージョンのブラウザパッチをダウンロードします。URL:http://npm.taobao.org/mirrors/chromedriver/
Step 3:ファイルを解凍し、python.exeと同じファイルの下に置く
四、ページの開きと事前登録
1.seleniumバッグの導入
from selenium import webdriver
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
import time
import pandas as pd
2.ページを開く
driver = webdriver.Chrome()
print(' Weibo.cn ...')
#
driver.get("https://login.sina.com.cn/signup/signin.php")
wait = WebDriverWait(driver,5)
# : 1 ,
time.sleep(60)
3.インタラクティブ運転を採用して、上の二つのプログラムを実行したら、一つの枠がポップアップします。この枠はウェブページのインタラクションをシミュレートするために使います。このボックスで登録を完了する(ログイン名、パスワード、ショートメールの検証などを含む)4.事前登録が完了したら、個人のホームページに入ります。
五、キーワード検索操作
1.上の図のキーワード入力ボックスを位置づけ、ボックスに検索対象を入力し、例えば「一生懸命勉強する」
# selector
s_input = driver.find_element_by_css_selector('#search_input')
#
s_input.send_keys(" ")
#
confirm_btn = driver.find_element_by_css_selector('#search_submit')
#
confirm_btn.click()
2.前のステップのコードの実行が完了すると、新しいウィンドウが表示され、個人のホームページからミニブログの検索ページにジャンプします。しかし、driverはまだ個人のホームページにあります。人のためにドライブの移動をして、微博検索ページに移動する必要があります。3.スイッチを使うト.window()方法シフト
# driver
driver.switch_to.window(driver.window_handles[1])
六、「全文展開」を識別してデータを取得する1.各要素のSelectorを理解し、位置を決める(一意の標識性に重点がある)
2.Selectorで元素を位置決めし、該当データを取得する
comment = []
username = []
# : ( 、 、 ), 20 , nodes 20
nodes = driver.find_elements_by_css_selector('div.card > div.card-feed > div.content')
#
for i in range(0,len(nodes),1):
# “ ”
flag = False
try:
nodes[i].find_element_by_css_selector("p>a[action-type='fl_unfold']").is_displayed()
flag = True
except:
flag = False
# “ ” , “ c”, , ;
#( , selector , , )
if(flag and nodes[i].find_element_by_css_selector("p>a[action-type='fl_unfold']").text.startswith(' c')):
nodes[i].find_element_by_css_selector("p>a[action-type='fl_unfold']").click()
comment.append(nodes[i].find_element_by_css_selector('p[node-type="feed_list_content_full"]').text)
else:
comment.append(nodes[i].find_element_by_css_selector('p[node-type="feed_list_content"]').text)
username.append(nodes[i].find_element_by_css_selector("div.info>div:nth-child(2)>a").text)
七、二ページ設置1.forサイクルを使ってページをめくることを実現します。ポイントは「次のページ」ボタンを識別してクリックすることです。
for page in range(49):
print(page)
#
nextpage_button = driver.find_element_by_link_text(' ')
#
driver.execute_script("arguments[0].click();", nextpage_button)
wait = WebDriverWait(driver,5)
#
nodes1 = driver.find_elements_by_css_selector('div.card > div.card-feed > div.content')
for i in range(0,len(nodes1),1):
flag = False
try:
nodes1[i].find_element_by_css_selector("p>a[action-type='fl_unfold']").is_displayed()
flag = True
except:
flag = False
if (flag and nodes1[i].find_element_by_css_selector("p>a[action-type='fl_unfold']").text.startswith(' c')):
nodes1[i].find_element_by_css_selector("p>a[action-type='fl_unfold']").click()
comment.append(nodes1[i].find_element_by_css_selector('p[node-type="feed_list_content_full"]').text)
else:
comment.append(nodes1[i].find_element_by_css_selector('p[node-type="feed_list_content"]').text)
username.append(nodes1[i].find_element_by_css_selector("div.info>div:nth-child(2)>a").text)
八、データの保存1.DataFrameを使ってフィールドを保存する
data = pd.DataFrame({'username':username,'comment':comment})
2.Excelにエクスポート
data.to_excel("weibo.xlsx")
九、完全コード
from selenium import webdriver
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from bs4 import BeautifulSoup
import time
import pandas as pd
''' , '''
driver = webdriver.Chrome()
print(' Weibo.cn ...')
#
driver.get("https://login.sina.com.cn/signup/signin.php")
wait = WebDriverWait(driver,5)
# : 1 ,
time.sleep(60)
''' , '''
# selector
s_input = driver.find_element_by_css_selector('#search_input')
#
s_input.send_keys(" ")
#
confirm_btn = driver.find_element_by_css_selector('#search_submit')
#
confirm_btn.click()
# driver
driver.switch_to.window(driver.window_handles[1])
''' '''
comment = []
username = []
# : ( 、 、 ), 20 , nodes 20
nodes = driver.find_elements_by_css_selector('div.card > div.card-feed > div.content')
#
for i in range(0,len(nodes),1):
# “ ”
flag = False
try:
nodes[i].find_element_by_css_selector("p>a[action-type='fl_unfold']").is_displayed()
flag = True
except:
flag = False
# “ ” , “ c”, , ;
#( , selector , , )
if(flag and nodes[i].find_element_by_css_selector("p>a[action-type='fl_unfold']").text.startswith(' c')):
nodes[i].find_element_by_css_selector("p>a[action-type='fl_unfold']").click()
comment.append(nodes[i].find_element_by_css_selector('p[node-type="feed_list_content_full"]').text)
else:
comment.append(nodes[i].find_element_by_css_selector('p[node-type="feed_list_content"]').text)
username.append(nodes[i].find_element_by_css_selector("div.info>div:nth-child(2)>a").text)
''' , '''
for page in range(49):
print(page)
#
nextpage_button = driver.find_element_by_link_text(' ')
#
driver.execute_script("arguments[0].click();", nextpage_button)
wait = WebDriverWait(driver,5)
#
nodes1 = driver.find_elements_by_css_selector('div.card > div.card-feed > div.content')
for i in range(0,len(nodes1),1):
flag = False
try:
nodes1[i].find_element_by_css_selector("p>a[action-type='fl_unfold']").is_displayed()
flag = True
except:
flag = False
if (flag and nodes1[i].find_element_by_css_selector("p>a[action-type='fl_unfold']").text.startswith(' c')):
nodes1[i].find_element_by_css_selector("p>a[action-type='fl_unfold']").click()
comment.append(nodes1[i].find_element_by_css_selector('p[node-type="feed_list_content_full"]').text)
else:
comment.append(nodes1[i].find_element_by_css_selector('p[node-type="feed_list_content"]').text)
username.append(nodes1[i].find_element_by_css_selector("div.info>div:nth-child(2)>a").text)
''' '''
data = pd.DataFrame({'username':username,'comment':comment})
data.to_excel("weibo.xlsx")
ここでSeleniumを使って微博爬虫(前登録、全文展開、ページをめくる)を実現する記事について紹介します。Selenium微博爬虫類に関する詳細は以前の文章を検索してください。または次の関連記事を引き続きご覧ください。これからもよろしくお願いします。