javascript - 使用 selenium 和 beautifulsoup 进行网页抓取时,通过 id、class、xpath、css 选择器查找元素不返回任何内容
问题描述
我是 webscraping 的新手,并且使用 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&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="{ "SubFeature": "Lists that include this title" }" 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>
- 我已经使用 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 触发事件或其他东西吗?我什至没有点击列表中列出的任何链接,甚至没有保留链接列表,我只需要计算有多少链接开始。
解决方案
你不需要硒的费用。您可以向页面发出相同的 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 - React 对象属性分配仅在第一次有效
- json - 如何从 Twitter API 加载状态?TypeError:字符串索引必须是整数
- angular - 为 MatTableDataSource 加入两个数组 - Angular/TS
- javascript - 使用下拉列表切换日期选择器的数量
- python-3.x - Python循环输入参数
- sql-server - 存储过程中的最后一个条目不更新
- liquid - 在 Liquid 中仅显示非整数的小数
- javascript - 了解 JavaScript 中的寻路算法
- java - Corda jar 启动:地址已在使用中:绑定错误
- json - 此 JSON 响应有任何安全漏洞吗?