Как получить информацию по каждой из полученых ссылок BeautifullSoup?
Изучая BeautifullSoup4 решил спарсить дививенды по каждой бумаге на сайте Доход.ру
Получилось спарсить все ссылки в переменную "item" в первом блоке кода но не получаеться к каждой из получених ссылок пременить метод из второго блока кода.
Первый блок:
import requests
from bs4 import BeautifulSoup
headers = {
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36"
}
url = "https://www.dohod.ru/ik/analytics/dividend"
req = requests.get(url, headers=headers)
src = req.text
soup = BeautifulSoup(src, "lxml")
first_page_urls = soup.find("tbody").find_all("a")
for item in first_page_urls:
item = "https://www.dohod.ru/" + item.get("href")
print(item) <<< тут список всех ссылок.
Второй блок:
for div_name in item:
info_block = soup.find("div", class_="main_content")
div_name = info_block.find("h1")
print(div_name) <<< тут назнавие эмитента.
Как заставить второй блок кода перебирать ссылки по очереди из переменной "item"?
Ответы (1 шт):
Автор решения: CrazyElf
→ Ссылка
Примерно так. Собираем ссылки в список, потом проходим по списку. Функционал получения и парсинга страницы через BS я вынес в отдельную функцию, потому что это код используется несколько раз. Ссылки были неправильные, исправил:
import requests
from bs4 import BeautifulSoup
headers = {
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36"
}
def soup_get(url):
req = requests.get(url, headers=headers)
src = req.content
soup = BeautifulSoup(src, "lxml")
return soup
main_url = "https://www.dohod.ru/ik/analytics/dividend"
soup = soup_get(main_url)
first_page_urls = soup.find("tbody").find_all("a")
items = []
for item in first_page_urls:
item = "https://www.dohod.ru/" + item.get("href")
print(item)
items.append(item)
for page_url in items:
soup = soup_get(page_url)
info_block = soup.find("div", class_="main_content")
div_name = info_block.find("h1")
print(div_name)