当前位置: 首页 > 知识库问答 >
问题:

如何在带有BS4的div元素内部找到?

潘安邦
2023-03-14

我正在制作一个python脚本,给出Scratch.mit.edu网站上的前5个特色项目。我正在使用请求获取数据。具有这些项目标题的元素位于div标记中,但当我使用bs4时,它不显示div标记的子项或后代。我怎么看标签里面?

我已经尝试了find_all()、find()、.descendents和.children。

soup.find("div").children

我需要

的输出


匿名用户

API

使用页面用来更新内容和解析json响应的api

https://api.scratch.mit.edu/proxy/featured

import requests
import pandas as pd

r = requests.get('https://api.scratch.mit.edu/proxy/featured').json()
project_info  = [(item['title'], 'https://scratch.mit.edu/projects/' + str(item['id'])) for item in r['community_featured_projects'][:6]]
df = pd.DataFrame(project_info , columns = ['Title', 'Link'])
print(df.head())

或者,次优选择,因为内容是动态呈现的,您可以使用Selenium这样的方法

限制到第一个“框”,然后选择Thumbnail-Title类的子A标记,并为top 5/或df.head()索引到列表中

.box:nth-of-type(1) .thumbnail-title > a

py(正如@p.hunter所指出的--您可以运行这个无头)

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.chrome.options import Options
import pandas as pd

options = Options()  
options.add_argument("--headless") 

d = webdriver.Chrome(options = options)
d.get('https://scratch.mit.edu/')
project_info = [(item.get_attribute('title') ,item.get_attribute('href') ) for item in  WebDriverWait(d,10).until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, ".box:nth-of-type(1) .thumbnail-title > a")))]
df = pd.DataFrame(project_info , columns = ['Title', 'Link'])
d.quit()
print(df)

共有2个答案

萧焱
2023-03-14
相关问题
羊舌洛华
2023-03-14

API

使用页面用来更新内容和解析json响应的api

https://api.scratch.mit.edu/proxy/featured

import requests
import pandas as pd

r = requests.get('https://api.scratch.mit.edu/proxy/featured').json()
project_info  = [(item['title'], 'https://scratch.mit.edu/projects/' + str(item['id'])) for item in r['community_featured_projects'][:6]]
df = pd.DataFrame(project_info , columns = ['Title', 'Link'])
print(df.head())

或者,次优选择,因为内容是动态呈现的,您可以使用Selenium这样的方法:

限制到第一个“框”,然后选择Thumbnail-Title类的子A标记,并为top 5/或df.head()索引到列表中

.box:nth-of-type(1) .thumbnail-title > a

py(正如@p.hunter所指出的--您可以运行这个无头)

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.chrome.options import Options
import pandas as pd

options = Options()  
options.add_argument("--headless") 

d = webdriver.Chrome(options = options)
d.get('https://scratch.mit.edu/')
project_info = [(item.get_attribute('title') ,item.get_attribute('href') ) for item in  WebDriverWait(d,10).until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, ".box:nth-of-type(1) .thumbnail-title > a")))]
df = pd.DataFrame(project_info , columns = ['Title', 'Link'])
d.quit()
print(df)
 类似资料:
  • 我想从这个网站上提取红色标记的信息。 本站的html文本由以下图片呈现。我要提取的信息再次被红色标记。 问题是我找不到带有class属性“find-元素”的div元素。我的代码看起来像这样 如果有人能帮我,那就太好了。 谢谢。

  • 问题内容: 我有一个复杂的html结构,其中包含许多表和div ..而且结构可能会更改。如何通过跳过两者之间的元素来查找xpath。例如 : 我必须获取有关“名字”范围的输入元素 例如: 但是..我可以跳过htmls之间的内容并直接访问输入元素吗? 问题答案: 您可以尝试以下Xpath: 说明: 选择元素: 然后在上方元素旁边获取元素: 然后在上面第二步中选择的元素内获取元素:

  • 问题内容: 我在页面上存在一个,我需要进行设置,以便当用户在该元素之外单击时它将被隐藏,但是如果用户在该元素内的某个位置单击,则它应该保留。 我尝试使用 和 将其添加到该特定DIV的click事件中,但这没有用。 谢谢! 问题答案: 在弹出式鼠标悬停时切换 标志 : 注: 如果页面上的某个地方,你有一个元素 阻止 的冒泡DOM树达(以注册),您可能希望 创建一个全屏幕 (就像一个页面叠加) 弹出包

  • 但是..我可以跳过HTML,直接访问输入元素吗…好像?

  • 我尝试找到不在div元素中的文本,并将其包装到div: null null 我找不到正确的方法。 我试图达到的结果是:

  • 问题内容: 我需要动态设置DIV元素内的文本。什么是最好的浏览器安全方法?我有可用的prototypejs和scriptaculous。 该函数如下所示: 问题答案: 我将使用支持纯文本,HTML代码段或定义方法的任何JavaScript对象的Prototype 方法。