Извлечение текста из диапазона - PullRequest
0 голосов
/ 23 января 2020

У меня проблема с тегом span, у которого нет идентификатора или класса. Более широкий подход заключается в извлечении текста между «ПУНКТ 1. БИЗНЕС» К «ПУНКТ 1А. ФАКТОРЫ РИСКА» по ​​ссылке ниже. Тем не менее, я не могу найти способ найти эту часть, потому что диапазон, в котором она находится, не имеет ни идентификатора, ни класса, который я могу найти (только родительский div, в котором находится диапазон: div = soup.find("div", {"id": "dynamic-xbrl-form"}).

Этот код не работает, к сожалению: #text = unicodedata.normalize('NFKD', soup.get_text()).replace('\n', '')

Вот мой подход:

url = 'https://www.sec.gov/ix?doc=/Archives/edgar/data/934549/000093454919000017/actg2018123110-k.htm#s62CF0831C63E51C2BEF33F4163F1DE65'
raw = requests.get(url)
soup = BeautifulSoup(raw.content)

div = soup.find("span", {"id": ... })
print(div.txt)

У вас есть какие-либо идеи или советы?

Большое спасибо Julius

Ответы [ 3 ]

1 голос
/ 23 января 2020

В моем случае я проверяю, используя идентификатор тега span, это решило мою проблему:

import requests
from bs4 import BeautifulSoup
URL = 'https://www.facebook.com/hackerv728'
page = requests.get(URL)
soup = BeautifulSoup(page.content, 'html.parser')
titles = soup.find_all('span', id='fb-timeline-cover-name')
for title in titles:
    print(title.text.strip())
1 голос
/ 23 января 2020

Как сказал @Gagan, контент сайта загружается с Javascript. Вам нужно использовать Selenium

Использование Selenium более мощно, чем другие функции Python. Я использовал ChromeDriver, так что если вы еще не установили, вы можете установить его в

http://chromedriver.chromium.org/

from  selenium import webdriver

driver_path = r'your driver path'
browser = webdriver.Chrome(executable_path=driver_path)
browser.get("https://www.sec.gov/ix?doc=/Archives/edgar/data/934549/000093454919000017/actg2018123110-k.htm#s62CF0831C63E51C2BEF33F4163F1DE65")
datas = browser.find_elements_by_css_selector("span") // use # or . for class or id name like span#id_name , span.class_name

for spans in datas:
    print(spans.text)

Вы также можете получить все источники

print (browser.page_source)
0 голосов
/ 23 января 2020

Содержимое этой страницы загружено с JavaScript, для этого нельзя использовать BeautifulSoup. Для этой цели используйте selenium.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...