Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用BeautifulSoup选择div父节点内的所有表元素?_Python_Html_Function_Web Scraping_Beautifulsoup - Fatal编程技术网

Python 如何使用BeautifulSoup选择div父节点内的所有表元素?

Python 如何使用BeautifulSoup选择div父节点内的所有表元素?,python,html,function,web-scraping,beautifulsoup,Python,Html,Function,Web Scraping,Beautifulsoup,我试图使用自定义函数从父节点div中选择所有table元素 到目前为止,我得到的是: 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, 'lxm

我试图使用自定义函数从父节点
div
中选择所有
table
元素

到目前为止,我得到的是:

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表格元素

如何调整此功能


是否有其他库可用于完成此任务?

第一个问题是“查找”仅查找第一个此类匹配项。第一个td post内容不包含任何表。我想你想要“芬德尔”。其次,您可以将CSS选择器与BeautifulSoup一起使用。因此,您可以在不使用attributes参数的情况下搜索
soup.findall('div.td-post-content')

第一个问题是“find”只查找第一个匹配项。第一个td post内容不包含任何表。我想你想要“芬德尔”。其次,您可以将CSS选择器与BeautifulSoup一起使用。因此,您可以搜索
soup.findall('div.td-post-content')
,而无需使用attributes参数。

接受其他评论者的评论,并对其进行扩展

您的
div\u组件
返回1个元素,不包含表,但使用
find\u all()
yeilds 8个元素:

len(soup.find_all('div', attrs={'class':'td-post-content'}))
因此,您不能只对列表使用
find()
,您需要遍历它以找到包含表的
div

另一种方法是,你可以使用

tables = soup.find_all('table', attrs={'class':'listas'})

其中tables是一个包含6个元素的列表。如果你知道你想要哪个表,你可以遍历这些表,直到找到你想要的那一个。

接受其他评论者的评论,并在上面展开

您的
div\u组件
返回1个元素,不包含表,但使用
find\u all()
yeilds 8个元素:

len(soup.find_all('div', attrs={'class':'td-post-content'}))
因此,您不能只对列表使用
find()
,您需要遍历它以找到包含表的
div

另一种方法是,你可以使用

tables = soup.find_all('table', attrs={'class':'listas'})
其中tables是一个包含6个元素的列表。如果您知道需要哪一个表,可以遍历这些表,直到找到所需的表。

css选择器。选择('.td post content.listas')css选择器。选择('.td post content.listas'))