我试图使用自定义函数从table父节点中选择所有的div元素。
到目前为止,这就是我所得到的:
import BeautifulSoup
import requests
import lxml
url = 'https://www.salario.com.br/profissao/abacaxicultor-cbo-612510'
def getTables(url):
url = requests.get(url)
soup=BeautifulSoup(url.text, 'lxml')
div_component = soup.find('div', attrs={'class':'td-post-content'})
tables = div_component.find_all('table', attrs={'class':'listas'})
return tables但是,当作为getTables(url)应用时,输出是一个空列表[]。
我期望这个函数返回div节点中所有的html表元素,给出他特定的属性。
我怎样才能调整这个功能?
还有其他库可以用来完成这个任务吗?
发布于 2021-03-08 04:07:00
接受其他评论者所说的话,并对其进行扩展。
div_component返回1元素,不包含表,但使用find_all() yeilds 8元素:
len(soup.find_all('div', attrs={'class':'td-post-content'}))因此,您不能只在列表中使用find(),您需要对其进行迭代以找到包含表的div。
另一种只需查找想要的表的方法,只需使用
tables = soup.find_all('table', attrs={'class':'listas'})其中的表是一个包含6个元素的列表。如果您知道需要哪个表,则可以遍历这些表,直到找到所需的表为止。
发布于 2021-03-08 01:22:55
第一个问题是“查找”只找到第一个这样的匹配。第一个td-post内容不包含任何表。我想你想要“发现”。其次,您可以在BeautifulSoup中使用CSS选择器。因此,您可以在不使用属性参数的情况下搜索soup.findall('div.td-post-content')。
https://stackoverflow.com/questions/66523174
复制相似问题