Heim  >  Fragen und Antworten  >  Hauptteil

HTML-Elemente können beim Webcrawlen nicht gefunden werden. Dieses Element ist im Site-Inspection-Tool sichtbar

Ich versuche, die Titel aller Tabellen von dieser URL zu crawlen: https://www.nature.com/articles/s41586-023-06192-4

Ich finde dieses HTML-Element auf der Website:

<b id="Tab1" data-test="table-caption">Table 1 Calculated Ct–M–Ct angles</b>

Ich kann diesen Titel nicht crawlen, da er nicht gefunden werden kann. Auch wenn ich das HTML-Skript auf der Konsole ausdrucke, kann dieses Element nicht gefunden werden.

Ich verwende den folgenden Code, um das HTML-Skript auszudrucken:

from requests_html import HTMLSession
from bs4 import BeautifulSoup

url = 'https://www.nature.com/articles/s41586-023-06192-4'

session = HTMLSession()
response = session.get(url)

response.html.render()

soup = BeautifulSoup(response.html.raw_html.decode('utf-8'), 'html.parser')
print(soup.prettify())

Verwenden Sie die Crawling-Funktion von BeautifulSoup:

def get_tables(driver):
    tables = []
    html = driver.page_source
    soup = BeautifulSoup(html, 'html.parser')

    for i in range(1, 11):
        try:
            table_caption = soup.find('b', {'id': f'Tab{i}', 'data-test': 'table-caption'})
            table_text = table_caption.text if table_caption else "Not Available"
            if table_text != "Not Available":
                print(f"找到表格{i}:{table_text}")
            else:
                print(f"未找到表格{i}。")
            tables.append(table_text)
        except Exception as e:
            print(f"处理表格{i}时出错:{str(e)}")
            tables.append("Not Available")

    return tables

Verwenden Sie die Crawling-Funktion von Selenium:

def get_tables(driver):
    tables = []

    for i in range(1, 11):
        try:
            table_caption = driver.find_element_by_css_selector(f'b#Tab{i}[data-test="table-caption"]')
            table_text = table_caption.text if table_caption else "Not Available"
            if table_text != "Not Available":
                print(f"找到表格{i}:{table_text}")
            else:
                print(f"未找到表格{i}。")
            tables.append(table_text)
        except Exception as e:
            print(f"处理表格{i}时出错:{str(e)}")
            tables.append("Not Available")

    return tables

Ich habe versucht, die Website mit Selenium und BeautifulSoup zu crawlen. Ich habe den Iframe überprüft. Ich habe den Abrufvorgang um 40 Sekunden verzögert, um sicherzustellen, dass die Seite vollständig geladen wird. Selbst GPT4 kann dieses Problem nicht lösen.

P粉225961749P粉225961749395 Tage vor556

Antworte allen(1)Ich werde antworten

  • P粉920485285

    P粉9204852852023-09-20 10:49:02

    所以你使用的代码看起来没问题,我想到的问题是,网站可能是通过JavaScript或某个XHR调用加载你要爬取的那个元素,因此当你使用requests库发送请求时,它无法获取到那个元素。

    解决这个问题的方法是,尝试使用Selenium,用selenium打开网站,然后将页面源代码加载到bs4中,这样你的代码就能正常工作了。

    注意:当整个网站加载完毕后,将页面源代码加载到bs4中。你还需要使用selenium创建一个登录功能,因为这个网站需要登录才能查看内容。

    Antwort
    0
  • StornierenAntwort