BeautifulSoup получает href списка – необходимо упростить скрипт – заменить многопроцессорностьPython

Программы на Python
Ответить
Anonymous
 BeautifulSoup получает href списка – необходимо упростить скрипт – заменить многопроцессорность

Сообщение Anonymous »

У меня есть следующий суп:
next
...

Из этого я хочу извлечь href "some_url"
Я хочу извлечь href "some_url"
и весь список страниц, перечисленных на этой странице: https://www.catholic-hierarchy.org/diocese/laa.html
примечание: есть много ссылок на подстраницы: которые мне нужно проанализировать. на данный момент: извлекаем из него все данные:
-епархии
-URL
-описание
-контактные-данные
-и т. д. etx.
Приведенный ниже пример захватит все URL-адреса епархий, получит некоторую информацию о каждой из них и создаст окончательный фрейм данных. Для ускорения процесса используется multiprocessing.Pool:
но подождите: как заставить этот парсер работать без поддержки multiprocessing!? я хочу запустить его в Colab, поэтому мне нужно избавиться от функции многопроцессорности.
Как этого добиться..!?
import requests
from bs4 import BeautifulSoup
from multiprocessing import Pool

def get_dioceses_urls(section_url):
dioceses_urls = set()

while True:
print(section_url)

soup = BeautifulSoup(
requests.get(section_url, headers=headers).content, "lxml"
)
for a in soup.select('ul a[href^="d"]'):
dioceses_urls.add(
"https://www.catholic-hierarchy.org/diocese/" + a["href"]
)

# is there Next Page button?
next_page = soup.select_one('a:has(img[alt="[Next Page]"])')
if next_page:
section_url = (
"https://www.catholic-hierarchy.org/diocese/"
+ next_page["href"]
)
else:
break

return dioceses_urls

def get_diocese_info(url):
print(url)

soup = BeautifulSoup(requests.get(url, headers=headers).content, "html5lib")

data = {
"Title 1": soup.h1.get_text(strip=True),
"Title 2": soup.h2.get_text(strip=True),
"Title 3": soup.h3.get_text(strip=True) if soup.h3 else "-",
"URL": url,
}

li = soup.find(
lambda tag: tag.name == "li"
and "type of jurisdiction:" in tag.text.lower()
and tag.find() is None
)
if li:
for l in li.find_previous("ul").find_all("li"):
t = l.get_text(strip=True, separator=" ")
if ":" in t:
k, v = t.split(":", maxsplit=1)
data[k.strip()] = v.strip()

# get other info about the diocese
# ...

return data

if __name__ == "__main__":
headers = {
"User-Agent": "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:99.0) Gecko/20100101 Firefox/99.0"
}

# get main sections:
url = "https://www.catholic-hierarchy.org/diocese/laa.html"
soup = BeautifulSoup(
requests.get(url, headers=headers).content, "html.parser"
)

main_sections = for a in soup.select("a[target='_paren ... eplace-mul
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»