javascript - 使用 selenium 和 beautifulsoup 进行网页抓取时,通过 id、class、xpath、css 选择器查找元素不会返回任何内容

标签 javascript python html selenium beautifulsoup

我是网络抓取、使用 beautifulsoup 和 selenium 的新手。我正在尝试从以下网页中抓取数据:

    https://epl.bibliocommons.com/item/show/2300646980

我正在尝试抓取以下部分:“包含该头衔的员工列表”。特别是,我想抢<li>的号码。标签,因为我只需要该员工列表上的项目/链接数量。

我已在“检查”页面提供的 HTML 代码上尝试了以下操作。以下是我试图从中抓取的 HTML 代码块:

<div class="ugc_bandage">
  <div class="lists_heading clearfix">
    <h3 data-test-id="ugc-lists-heading">
      Listed
    </h3>
    <div class="ugc_add_link">
      <div class="dropdown saveToButton clearfix" id="save_to_2300646980_id_7a3ateh0panp1uv0he1v7aqmj9" data-test-id="add-to-list-dropdown-container">
  <a href="#" aria-expanded="false" aria-haspopup="true" class=" dropdown-toggle dropdown-toggle hide_trigger_icon" data-test-id="add-to-list-save-button" data-toggle="dropdown" id="save_button_2300646980_id_7a3ateh0panp1uv0he1v7aqmj9" rel="nofollow">
       <i aria-hidden="true" class=" icon-plus"></i>
<span aria-hidden="true">Add</span><span class="sr-only" data-js="sr-only-dropdown-toggle" data-text-collapsed="Add, collapsed" data-text-expanded="Add, expanded">Add, collapsed</span><span aria-hidden="true" class="icon-arrow"></span></a>  
  <ul class="dropdown-menu">
      <li>
        <a href="/user_lists/new?bib=2300646980&amp;origin=https%3A%2F%2Fepl.bibliocommons.com%2Fitem%2Fload_ugc_content%2F2300646980" class="newList">Create a New List</a>
      </li>
      <li>
        <a href="/lists/add_bib/mine?bib=2300646980_fangirl" data-js="cp-overlay" id="more_lists_id_7a3ateh0panp1uv0he1v7aqmj9">Existing Lists »</a>
      </li>

  </ul>
</div>

    </div>
  </div>
  <h4 data-test-id="staff-lists-that-include-this-title">Staff Lists that include this Title</h4>
  <div data-analytics="{ &quot;SubFeature&quot;: &quot;Lists that include this title&quot; }" class="expand clearfix" id="all_lists_expand" testid="text_listsincluding">
    <ul class="further_list">
      <li> [LIST ENTRIES START HERE, BUT THERE'S SO MANY, IT WOULD MAKE THIS POST TO LONG.] </li>

  1. 我已使用 xpath 抓取了上述代码,该代码是从检查人员列表部分 ( id="all_lists_expand" ) 中复制的:
    element = driver.find_elements_by_xpath('//*[@id="rightBar"]/div[3]/div')
  • 我尝试通过使用类名来抓取该部分:
  •     element = driver.find_element_by_class_name('expand clearfix')
    
  • 我还尝试使用 css 选择器进行抓取:
  •     element = driver.find_element_by_css_selector('#all_lists_expand')
    

    我还完成了上面代码的其他变体,寻找元素的父级、xpath 等的类。

    以上所有尝试均返回 NONE 。我不确定我做错了什么,我是否应该使用 Selenium 触发事件或某些东西?我什至没有单击列表中列出的任何链接,甚至没有保留链接列表,我只需要计算一开始有多少个链接。

    最佳答案

    你不需要花费 Selenium 的费用。您可以发出与页面相同的 GET 请求,然后从返回的 json 中提取 html,并使用 bs4 进行解析并提取链接

    import requests
    from bs4 import BeautifulSoup as bs
    
    r = requests.get('https://epl.bibliocommons.com/item/load_ugc_content/2300646980').json()
    soup = bs(r['html'], 'lxml')
    links = [i['href'] for i in soup.select('[data-test-id="staff-lists-that-include-this-title"] + div [href]')]
    print(len(links))
    print(links)
    

    关于javascript - 使用 selenium 和 beautifulsoup 进行网页抓取时,通过 id、class、xpath、css 选择器查找元素不会返回任何内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58173399/

    相关文章:

    javascript - 使用 jquery 自动聚焦 div 标签不起作用

    javascript - jQuery - 并发?

    javascript - 如何计算不同数组之间的所有组合?

    javascript - 如何在 div 中为元素设置动画以跟随鼠标移动?

    python - IIS : django. core.exceptions.AppRegistryNotReady 上的 Django:应用程序尚未加载

    javascript - 将剪贴板中的代码粘贴到多个输入字段中

    javascript - 将 AppleScript if 子句翻译为其 JavaScript 等效项

    python - Cronjob - 如何输出 stdout 并忽略 stderr

    python - 如何使用 wxPython 以正确的大小打开 GUI?

    javascript - 根据窗口位置淡入淡出 div