搜索

首页  >  问答  >  正文

在网络爬虫过程中无法定位HTML元素。该元素在站点检查工具中可见

我正在尝试从此URL中爬取所有表格的标题:https://www.nature.com/articles/s41586-023-06192-4

我可以在网站上找到这个HTML元素:

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

我无法爬取这个标题,因为找不到它。 即使我将HTML脚本打印到控制台,也找不到这个元素。

我使用以下代码打印HTML脚本:

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())

使用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

使用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

我尝试使用Selenium和BeautifulSoup来爬取网站。 我已经检查了iframe。 我延迟了提取操作40秒,以确保页面完全加载。 即使是GPT4也无法解决这个问题。

P粉225961749P粉225961749440 天前593

全部回复(1)我来回复

  • P粉920485285

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

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

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

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

    回复
    0
  • 取消回复