Фильтр Div, BeautifulSoup, с пустым возвратом - PullRequest
2 голосов
/ 06 января 2020

Используя мой алгоритм ниже, я пытаюсь отфильтровать div:

from bs4 import BeautifulSoup

for link in soup.select('div > a[href*="/tarefa"]'):
    ref=link.get('href')
    rt = ('https://brainly.com.br'+str(ref))
    p.append(rt)
print(p)

Div Ниже:

<div class="sg-content-box__content"><a href="/tarefa/2254726"> 

настроить:

<div class="sg-content-box"><a href="/tarefa/21670613">

Но при этом Return пуст. В чем может быть ошибка в этой части?

Ожидаемый выход: Примеры.

/tarefa/2254726 

/tarefa/21670613  

Как мне проверить это из? Иногда страница заканчивала тем, что меняла содержимое, где href - это большой объем данных, для чего нужно что-то вроде 'div> a [href * = "/ task"]', чтобы вы могли искать его. ключевое слово 'задача', а не создание переменной, уже содержащей содержимое.

Полный алгоритм:

from selenium import webdriver
from bs4 import BeautifulSoup
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC


browser =webdriver.Firefox(executable_path=r'C:/path/geckodriver.exe')
browser.get('https://brainly.com.br/app/ask?entry=hero&q=jhyhv+vjh')

html = browser.execute_script("return document.documentElement.outerHTML")
p=[]
soup=BeautifulSoup(html,'html.parser')
for link in soup.select('div > a[href*=""]'):
    ref=link.get('href')
    rt = ('https://brainly.com.br'+str(ref))
    p.append(rt)
print(p)

Ответы [ 2 ]

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

Возможно, это происходит из-за того, что браузер требует больше времени для загрузки данных. Но иногда вы получаете пустой результат.

Создайте WebDriverWait () и дождитесь элемента visibility_of_all_elements_located ()

from selenium import webdriver
from bs4 import BeautifulSoup
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC


browser =webdriver.Firefox(executable_path=r'C:/path/geckodriver.exe')
browser.get('https://brainly.com.br/app/ask?entry=hero&q=jhyhv+vjh')
WebDriverWait(browser,10).until(EC.visibility_of_all_elements_located((By.CSS_SELECTOR,'a[href*="/tarefa"]')))
html=browser.page_source
#html = browser.execute_script("return document.documentElement.outerHTML")
p=[]
soup=BeautifulSoup(html,'html.parser')
for link in soup.select('div.sg-actions-list__hole > a[href*="/tarefa"]'):
    ref=link.get('href')
    rt = ('https://brainly.com.br'+str(ref))
    p.append(rt)
print(p)

Выход :

['https://brainly.com.br/tarefa/2254726', 'https://brainly.com.br/tarefa/21670613', 'https://brainly.com.br/tarefa/10188641', 'https://brainly.com.br/tarefa/22664332', 'https://brainly.com.br/tarefa/24152913', 'https://brainly.com.br/tarefa/11344228', 'https://brainly.com.br/tarefa/10888823', 'https://brainly.com.br/tarefa/23525186', 'https://brainly.com.br/tarefa/16838028', 'https://brainly.com.br/tarefa/24494056']
0 голосов
/ 06 января 2020
from bs4 import BeautifulSoup

test_html = '''
         <div class="sg-content-box__content"><a href="/tarefa/2254726"> 
         <div class="sg-content-box"><a href="/tarefa/21670613">
         '''

soup = BeautifulSoup(test_html, 'lxml')
p=[]
for link in soup.find_all('div'):
    ref=link.a.get('href')
    rt = ('https://brainly.com.br'+str(ref))
    p.append(rt)
print(p)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...