前提・実現したいこと
こんにちわ。Python初学者です。
Djangoを使って動的なwebサイトからスクレイピングしたデータをここでお力を借りてローカルホストに表示さすことができたのですが、2つの部分(<a>タグと<span>タグの部分)をスクレイピングしたデータをfor文で回してすべてのデータを取得したいのですがうまくいきません。
発生している問題
下記のcoll/views.pyのget_date()の関数で、<a>タグを取得して、get()関数で<span>タグの中身を取得したいのですが、どちらか一つの関数しか機能していないような感じになってしまいます。こちらは2つの関数が別々の要素をスクレイピング取得しようとしているから一つの関数しか機能しないんでしょうか??
実現したいこととしましては、指定したwebサイトの<a>タグと<span>タグをすべて取得してできれば、空のリストを作ってスクレイピングしたデータを格納したいのですが、どのようなコードを書けば良いでしょうか?
できればget_date()だけで<a>タグと<span>タグどちらも取得したいです。
ぜひ、ご教授いただけないでしょうか??よろしくお願いします。
該当のソースコード
coll/views.py
from django.shortcuts import render from selenium import webdriver import chromedriver_binary from selenium.webdriver.common.keys import Keys from selenium.webdriver.chrome.options import Options import time import urllib.request options = Options() options.headless = True options.add_argument('--headless') driver = webdriver.Chrome(options=options) driver.get("動的なwebサイトURL") def get_date(requests): selector = '<a>タグの要素' element = driver.find_elements_by_css_selector(selector) element = [a.get_attribute("href") for a in element] context = {'links': element} return render(requests, 'coll/index.html', context) def get(requests): date_element = "<span>の要素" date = driver.find_elements_by_css_selector(date_element) context = {'dates': date} return render(requests, 'coll/index.html', context)
該当のソースコード
templates/coll/index.html
<!DOCTYPE html> <head> <meta charset="UTF-8"> <title>index</title> </head> <body> {% for link in links %} {{ link }} {% endfor %} {% for datess in dates %} {{ datess }} {% endfor %} </body>
試したこと
views.pyにget_date()かget()をどちらか一つだけ書いた場合(index.htmlの中身はそれによって少し変数名とかは変えています。)はどちらも正常にローカルホストに表示されます。一つ一つの関数なら欲しいデータの取得することはできていそうです。
本当はget_date()の中だけで<a>と<span>タグを取得するコードを書きたいので下記のようにしてみたけど<a>タグのデータしか取得できませんでした。こちらどのように改善すれば良いでしょうか?
def get_date(requests): selector = '<a>タグの要素' element = driver.find_elements_by_css_selector(selector) element = [a.get_attribute("href") for a in element] context = {'links': element} date_element = "<span>の要素" date = driver.find_elements_by_css_selector(date_element) conte = {'datess': date} return render(requests, 'coll/index.html', context, conte)
補足情報(FW/ツールのバージョンなど)
mac10.15.3
python3.8
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/08/21 06:06
2020/08/21 06:10 編集
2020/08/21 06:12
2020/08/21 06:13
2020/08/21 06:26
2020/08/21 07:36
2020/08/21 07:37 編集
2020/08/21 07:55
2020/08/21 09:39
2020/08/21 15:15