pythonでスクレイピングする時のサンプル コードです。
指定したタグとクラスで要素をテキストで取り出しリストに格納、pandasのseriesに変換してリターン
#タグで要素取る
def tag_get(self,tag1,tag2):
#リスト初期化
all_list = []
for txt in self.res.find_all(tag1, class_ = tag2):
#print(txt.text)
all_list.append(txt.text)
s = pd.Series(all_list)
return s
html = self.driver.page_source.encode('utf-8')
res = BeautifulSoup(html, "lxml")
tag1 = ‘p’はタグ
tag2 = ‘link’はクラス
リンクのaタグを見つけて、指定条件でリストに追加と置換
for element in elements.find_all("a"):
url = element.get("href")
if 'なんとか' in url:
all_list.append(url)
elif 'かんとか' in url:
url = url.replace('かんとか', 'なんとか')
url = uri + url
elif '//' in url:
url = url.replace('http://', 'https://')
else:
pass
指定したclassの数をカウントする
この回数分の処理を繰り返す。
def check_datenum(self):
elements = self.driver.find_elements_by_class_name(self.key_class)
return len(elements)
find_element_by_class_nameは、Seleniumのバージョンにより非推奨になる。
By.CSS_SELECTOR
Seleniumのバージョンにより以下
driver.find_elements(By.CSS_SELECTOR,'div.class')
指定したCSSクラスでURLを見つけてリストに格納し、pandasデータフレームに格納
elements = driver.find_elements(By.CSS_SELECTOR,'div.heading > a')
elem_url=[]
for elem in elements:
elem_url.append(elem.get_attribute("href"))
alink = pd.DataFrame(elem_url)
Xpathであいまい検索、ワイルドカード
Xpath自体はChromeのデバッグで、検証からコピーしています。
//*[@id="IDname_20211004"]/dd/ul[1]/li[1]/a ↑だった場合に xpath= '//*[contains(@id,"IDname_")]/dd/ul[1]/li[1]/a'
URLの連番の一部をループで回して作ってしまう
##レース開催日分のレース詳細を取りに行く ## この時にclass内で第一レースのURLは予想して入れてしまう for i in range(1, num+1): CD.key_URL = 'https://.jp/a' + str(i) + '0001/nav_btn' CD.table_name = 'detail' CD.key_tag = 'a' CD.ifstr = "nav_btn" CD.dget() linklists = CD.check_txtnum() print(linklists)
ドライバー準備のオプション設定
class DClass():
def __init__(self):
#ドライバー呼び出し
self.driver_option()
def driver_option(self):
options = webdriver.ChromeOptions()
options.add_argument('disable-infobars')
options.add_argument('--no-sandbox')
options.add_argument('--headless')
options.add_argument('--window-size=1024,768')
user_agent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Safari/537.36"
options.add_argument('--user-agent=' + user_agent)
driver = webdriver.Chrome(options=options);
driver.implicitly_wait(25)
driver.set_page_load_timeout(25)
self.driver = driver
マルチスレッド化
windowsアプリ制作の時に使用。
そうしないとボタン動作でアプリは動作しているが、画面上はフリーズしたように見えてしまうため。
def callback(self):
th = threading.Thread(target=self.DF_MAKE)
th.start()
対象URLのリトライ関連
j = 0
while j < 9:
try:
self.driver.get(self.key_URL)
print("The page was loaded " + self.key_URL)
except TimeoutException:
j = j + 1
print("Timeout, Retrying... (%(j)s/%(max)s)" % {'j': j, 'max': 9})
time.sleep(15)
continue
else:
break
sleep(3)
HTMLタグ指定でのスクレイピング
driver.find_element(By.TAG_NAME, "h2")Seleniumのバージョンによっては、もう動かないはず。非推奨かな?
find_elements_by_tag_name
CSS指定でのスクレイピング
複数クラス指定の一例
driver.find_element(By.CSS_SELECTOR,'.gLFyf.gsfi')
クラスとタグ指定
driver.find_elements(By.CSS_SELECTOR,'div.yuRUbf > a')
ID指定
driver.find_elements(By.CSS_SELECTOR,'#ID')
前方一致や後方一致もあるものの、あまり私が使わないため省略。
参考
【Python】Seleniumを利用したスクレイピングでよく使うプログラムサンプル集
【Python】Seleniumを利用したスクレイピングでよく使うスプレッドシートのプログラムサンプル集
合同会社ムジンケイカプロ
SEO・サイト改善・業務効率支援
成果率と検索に強いホームページ制作・運用改善のご相談を承っています。
法人クライアントとの契約多数、WEB制作会社やIT専門人材との協業、サイト保守・運用まで幅広く対応しています。
(2025年7月現在)
- ランサーズ実績:238件/評価191件(★5.0)/完了率99%/リピーター29人
- ココナラ実績:販売実績66件/評価★5.0
サイト改善・集客最適化まで、一貫してお任せいただけます。
当サイトはリンクフリーです
引用・SNSでの共有はご自由にどうぞ。事前連絡は不要ですが、もしご連絡いただければ、貴社コンテンツをご紹介できる場合もございます。

