Stack Overflow на русском Asked on November 22, 2021
Я бы хотел спарсить эти поля в таблице, но у меня никак не получается получить доступ к этой таблице в html – она с большой глубиной вложенности.
from bs4 import BeautifulSoup
import requests
res = requests.get('http://bonds.finam.ru/issue/details0256500001/default.asp')
soup = BeautifulSoup(res.text, 'lxml')
print(soup.find('table'))
Вот вариант рабочий, там js подгружается
from requests_html import HTMLSession
session = HTMLSession()
response = session.get('https://bonds.finam.ru/issue/details0256500001/default.asp')
response.html.render()
get_block = response.html.xpath('//*[@id="content-block"]/div/div[2]/table/tbody/tr/td[1]/div/table/tbody/tr[3]/td[2]/text()')
get_block = [ii.strip() for ii in get_block]
print(get_block)
Answered by Борис Бондарев on November 22, 2021
сделал запрос через selenium, через requests почему то две последние строки из таблицы в html нет, видимо js что то мутит там
from bs4 import BeautifulSoup
from selenium import webdriver
driver = webdriver.Firefox()
driver.get('http://bonds.finam.ru/issue/details0256500001/default.asp')
html = driver.page_source
driver.quit()
soup = BeautifulSoup(html, 'lxml')
div = soup.find('div', class_='datas')
trs = div.find_all('tr')
for tr in trs:
tds = tr.find_all('td')
print(tds[1].text.strip())
вывод:
# ООО "Городской супермаркет"
# Общество с ограниченной ответственностью "Городской супермаркет"
# 7705466989
# http://www.azbukavkusa.ru
# Российская Федерация, 113054, г. Москва, ул. Валовая, д. 8/18
# Российская Федерация, 113054, г. Москва, ул. Валовая, д. 8/18
# (495) 504-3787; 504-3477(факс)
# Торговля
Answered by Ildar on November 22, 2021
Дело в том, что сам <table></table>
в Python
отдается пустым.
Вот так можно сделать словарь, думаю вы разберетесь дальше:
import requests
from bs4 import BeautifulSoup as BS
resp = requests.get('http://bonds.finam.ru/issue/details0256500001/default.asp')
soup = BS(resp.text, 'lxml')
table = soup.find('div', class_='datas').find_all('tr')
result = {}
for tr in table:
tds = [td.text.replace('xa0', ' ') for td in tr.find_all('td')]
result[tds[0]] = tds[1]
print(result)
Answered by n1tr0xs on November 22, 2021
Get help from others!
Recent Answers
Recent Questions
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP