Я пытаюсь собрать небольшую порцию информации с сайта: извлечь данные и сохранить их в наборе CSV-данных. Проект: для списка контактных данных общественных служб и официальной службы поддержки в городах и деревнях: - приблизительно 1600 записей
базовый c -сайт: https://www.service-bw.de/web/guest/trefferliste/-/trefferliste/q-rathaus
страница с подробной информацией: Rathaus [Gemeinde Grünkraut] https://www.service-bw.de/web/guest/organisationseinheit/-/sbw-oe/Rathaus-6000566-organisationseinheit-0
примечание: мы получили приблизительно 1600 страниц ... поэтому один из главных вопросов - как собрать их в шоу ... как сделать l oop на всех страницах, которые содержат данные
<div class="sp-m-organisationseinheitDetails-basisInfos-content sp-l-grid-container">
<div class="sp-l-grid-row">
<div class="sp-l-grid-col-md-6 sp-l-grid-col-sm-6 sp-l-grid-xs-col-12">
<div> <div itemprop="address" itemscope="itemscope" itemtype="http://schema.org/PostalAddress" class="sp-m-organisationseinheitDetails-basisInfos-addressBlock">
<h4 class="sp-m-organisationseinheitDetails-basisInfos-detailsTitle mdash">Hausanschrift</h4>
<div itemprop="streetAddress"> <span>Scherzachstr.</span> <span>2</span><br>
Желаемый результат:
Hausanschrift:
- name
- street & housenumber
- postal code & town
Kontaktmöglichkeiten:
- telehon
- fax
- e-mail
- internet
видеть на изображении порцию информации, которая есть в каждой записи - в каждой из более чем 1600 записей ...:
мой подход :
import requests
from bs4 import BeautifulSoup
from concurrent.futures.thread import ThreadPoolExecutor
url = "https://www.service-bw.de/web/guest/trefferliste/-/trefferliste/q-rathaus{}"
def main(url, num):
with requests.Session() as req:
print(f"Collecting Page# {num}")
r = req.get(url.format(num))
soup = BeautifulSoup(r.content, 'html.parser')
link = [item.get("href")
for item in soup.findAll("a", rel="bookmark")]
return set(link)
with ThreadPoolExecutor(max_workers=20) as executor:
futures = [executor.submit(main, url, num)
for num in [""]+[f"page/{x}/" for x in range(2, 50)]]
allin = []
for future in futures:
allin.extend(future.result())
soup = BeautifulSoup(r.content, 'html.parser')
target = [item.get_text(strip=True, separator=" ") for item in soup.find(
"h4", class_="sp-m-organisationseinheitDetails-basisInfos-content sp-l-grid-container").find_next("ul").findAll("dd itemprop")[:8]]
head = [soup.find("h4", class_="plugin-title").text]
new = [x for x in target if x.startswith(
("Telefon", "Fax", "E-Mail", "Internet"))]
return head + new
with ThreadPoolExecutor(max_workers=50) as executor1:
futures1 = [executor1.submit(parser, url) for url in allin]
for future in futures1:
print(future.result())
кстати. возможно, нам удастся получить дальнейшее (тоже дополнительный контент) - но в данный момент я пытаюсь понять, как получить базовый c контроль за получением страниц и их синтаксическим анализом в целом ...
где я застрял: я получаю ошибки: File "C:\Users\Kasper\Documents_f_s_j_mk__dev_\bs\bw.py", line 28 target = [item.get_text(strip=True, separator=" ") for item in soup.find( ^ IndentationError: unexpected indent [Finished in 0.32s]
но кроме этого я подозреваю, что весь код работает хорошо и выбирает все нужные элементы.
Возможно, у вас есть подсказка для меня и дать некоторое руководство .. спасибо заранее.