Извлечение данных в Python с помощью Beautifulsoup - PullRequest
0 голосов
/ 07 ноября 2019

Я пытаюсь извлечь данные из https://ash.confex.com/ash/2019/webprogram/start.htm и получаю ошибку с find_all из beautifulsoup

import webbrowser
import os
import requests
from bs4 import BeautifulSoup
import sys
import wget
import pandas as pd
import time
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

driver = webdriver.Chrome('D:\\crome drive\\chromedriver.exe')
driver.get('https://ash.confex.com/ash/2019/webprogram/start.html')
searchterm = driver.find_element_by_id("words").send_keys("CAR-T")
driver.find_element_by_name("submit").click()
#driver.find_element_by_tag_name("resulttitle")
#driver.find_element_by_class_name("a")

soup_level1=BeautifulSoup(driver.page_source, 'lxml')
#fl=soup_level1.find_all(class_='soup_level1')
results = soup_level1.find_all('div', attrs={'class':'resulttitle'})
tag = results.findall('a', attrs='href')

Я получаю ошибку

AttributeError: Объект ResultSet не имеет атрибута 'findall'. Вы, вероятно, рассматриваете список предметов как отдельный предмет. Вы вызывали find_all (), когда собирались вызвать find ()?

1 Ответ

1 голос
/ 07 ноября 2019

Да, это именно то, что говорит ошибка - метод find_all предполагается использовать в html-дереве, но в вашем коде переменная results является объектом ResultSet. В bs4 это список, где каждый элемент представляет собой дерево HTML.

results = soup_level1.find_all('div', attrs={'class':'resulttitle'})
print(type(results))   # <class 'bs4.element.ResultSet'>
print(results)   # []

Это также показывает, что ваш results пуст. Я искал в HTML и не увидел ни одного div с class = "resulttitle", так что вы можете перепроверить, что вы ищете.

Теоретически, если ваша results переменная не былаt пусто, вы можете просмотреть каждый элемент в results , а затем найти все ссылки, которые вы ищете:

results = soup_level1.find_all('div', attrs={'class':'resulttitle'})
for result in results:
    tag_list = result.find_all('a', attrs='href)     
    # this will yield another list where each item is an HTML tree
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...