如何使用find_all读取下一个元素

时间:2016-11-15 14:18:53

标签: python-2.7 beautifulsoup

首先,如果你看一下我的帖子,我想感谢你。我发现了许多关于如何使用BS4阅读下一个元素的帖子,但它涉及关键字相关的问题。

这是我的问题:我尝试从txt.files中删除数据,并且构建HTML的方式对于不同的变量具有类似的环境。

例如,这里是我要提取的变量之一:

(不要注意编码/解码部分)

    number= bs.find_all('span', class_='grid_1 prefix_1 suffix_1 data')[0].get_text().encode('ascii', 'ignore').decode(
    'ascii')

它运行良好,但现在我要提取的下一个变量出现在数字之后出现完全相同的html构建。所以当我跑

Local= bs.find_all('span', class_=''span', class_='grid_1 prefix_1 suffix_1 data')[0].get_text().encode('ascii', 'ignore').decode(
    'ascii')
number= bs.find_all('span', class_='grid_1 prefix_1 suffix_1 data')[0].get_text().encode('ascii', 'ignore').decode(
    'ascii')

它为我提供了两个变量的相同信息。我知道BS4在第一次遇到findall中插入的元素时会停止。

阅读Beautiful Soup文档后,我尝试使用find_next命令获取与第二个元素对应的数据。 我跑的时候:

    Local= bs.find_all('span', class_='grid_1 prefix_1 suffix_1 data')[0].find_all_next().encode('ascii', 'ignore').decode(
    'ascii')

我收到以下Python错误: AttributeError:'ResultSet'对象没有属性

当我尝试单独运行find_next命令时如下:

Local= bs.find_next('span', class_='grid_1 prefix_1 suffix_1 data')[0].encode('ascii', 'ignore').decode(
    'ascii')

我收到以下Python错误: TypeError:'NoneType'对象没有属性'__getitem __'

我的问题是“如何正确地将find_next命令应用于find_all?”

1 个答案:

答案 0 :(得分:0)

find_all()函数会返回与您的span参数匹配的所有class代码:class_='grid_1 prefix_1 suffix_1 data'

因此,没有“下一个”元素可供查找。你已经拥有它了。

尝试循环find_all()的结果:

spans = bs.find_all('span', class_='grid_1 prefix_1 suffix_1 data')
for span in spans:
    sub_text = re.sub(r'[\ \n\r]{2,}', '', span.get_text())