Pythonのスクレイピングの勉強をしておりまして、タウンページの検索結果(動物病院 東京都中野区)を取得してCSVに書き出したいです。
病院名やカテゴリー、住所などのテキストは取得できるのですが、「ウェブサイト」というaタグのhref属性が取得できません。
※現状は「ウェブサイト」というテキストを取得しております。
URLを取得するにはどのようなコードにすれば良いかご教授いただきたいです...!
どうぞよろしくお願いいたします!
Version
Python 3.8.1
beautifulsoup4 4.9.3
chromedriver-binary 89.0.4389.23.0
idna 2.10
numpy 1.20.2
pip 21.0.1
requests 2.25.1
selenium 3.141.0
Code
import csv import numpy as np import requests from bs4 import BeautifulSoup from selenium import webdriver from selenium.webdriver.chrome.options import Options import chromedriver_binary import itertools import collections from collections import Iterable from time import sleep options = Options() options.add_argument('--headless') driver = webdriver.Chrome(chrome_options=options) driver.get("https://itp.ne.jp/topic/?topic=199&area=13114&sort=01&sbmap=false") while True: try: driver.find_element_by_class_name('m-read-more__text').click() except: print('---------------「さらに表示」押下完了---------------') break r = driver.page_source soup = BeautifulSoup(r, "html.parser") shop_name = soup.find_all("a","m-article-card__header__title__link") name_list = [] for name in shop_name: name_list.append(name.get_text().strip()) shop_cg_header= soup.find_all("header", "m-article-card__header") cg_list = [] for header in shop_cg_header: each_cg = header.find("p", "m-article-card__header__category") if each_cg == None: cg_list.append("") else: cg_list.append(each_cg.get_text().strip()) print(cg_list) print(len(cg_list)) shop_web= soup.find_all("div", "m-article-card__tag") web_list = [] for web in shop_web: web_list.append(web.get_text().strip()) shop_cap = soup.find_all("div", "m-article-card__lead__body") cap_list = [] for cap in shop_cap: cap_each = cap.find_all("p") cap_list_each = [] for each in cap_each: cap_list_each.append(each.get_text().strip()) cap_list.append(cap_list_each) cap_list_size = [len(v) for v in cap_list] final_list = [] for i in range(len(name_list)): name = [] name.append(name_list[i]) cg = [] cg.append(cg_list[i]) web = [] web.append(web_list[i]) cap = [] cap.append(cap_list[i]) list = name + cg + web + cap final_list.append(list) def flatten(x): result = [] for el in x: if isinstance(x, collections.Iterable) and not isinstance(el, str): result.extend(flatten(el)) else: result.append(el) return result clean_data =[] for i in range(len(final_list)): list = flatten(final_list[i]) clean_data.append(list) header = ["No.","会社名", "カテゴリー", "Web", "特徴", "最寄駅", "Tel", "Adrress"] index = [] for i in range(len(clean_data)): index.append(i+1) with open('動物病院.csv', 'w', newline="") as f: writer = csv.writer(f) writer.writerow(header) for i, row in zip(index, clean_data): writer.writerow([i] + row)
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/04/07 12:10
2021/04/07 12:19