我想在此页面的弹出窗口中收集数据。 https://www.commonsense.org/education/game/garrys-mod
我正在尝试在弹出的主题和收集中收集数据。技能。 我知道我可以使用硒,但如果它没用,我宁愿不要。
我想收集的数据在那里:
subjectSkills = gameSoup.find('div',class_='popper popper-popover subjects-skills')
然而,它返回None,因为它位于弹出窗口后面,如下所示:
<a href="#" id="subjects-skills" class="body-color" data-toggle="popover" data-content=".subjects-skills" data-arrow="false" target="_self">Subjects & skills</a>
单击箭头按钮后,data-arrow
的值将更改为true,这可能是一个解决方案,但我不确定如何/是否可以更改此值。
由于
答案 0 :(得分:3)
如果您正在寻找我用过的主题的弹出窗口
res = soup.findAll("div", {"class": "subjects-skills__item"})
,回报是:
<div class="subjects-skills__item">
<h5 class="subjects-skills__label">Subjects</h5>
<ul>
<li>Science</li>
</ul>
</div>,
<div class="subjects-skills__item">
<h5 class="subjects-skills__label">Skills</h5>
<ul>
<li>Creativity</li>
<li>Critical Thinking</li>
</ul>
</div>
我通过点击弹出窗口获得它。突出显示文本,然后右键单击并转到检查以找到该类。
from bs4 import BeautifulSoup as bs4
import requests
def get_data():
url = 'https://www.commonsense.org/education/game/garrys-mod'
r = requests.get(url, headers={"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.103 Safari/537.36"})
html_bytes = r.text
soup = bs4(html_bytes, 'lxml')
res = soup.findAll("div", {"class": "subjects-skills__item"})
return res
test1 = get_data()
如果您只想要文字..
# For just the Text
for i in test1:
print(i.text)
返回
Subjects
Science
Skills
Creativity
Critical Thinking