【问题标题】:Python bs4 - Find text from all listsPython bs4 - 从所有列表中查找文本
【发布时间】:2021-02-12 17:00:22
【问题描述】:

我有两个从网站上抓取数字的功能。都没有得到想要的输出,但它们很接近。我知道我遗漏了一些明显的东西。

def getNums():
    headers = {'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36 Edg/88.0.705.53'}
    r = requests.get(url, headers=headers)
    soup = BeautifulSoup(r.text, 'html.parser')
    nums = soup.find_all('ul', {'class' : 'numbers'})
    return nums

输出:

<ul class="numbers">
<li class="result">11</li>
<li class="result">13</li>
<li class="result">14</li>
<li class="result">27</li>
<li class="result">40</li>
<li class="result">41</li>
<li class="addresult">23</li>
</ul>

...

这个输出很好,但我一直在努力从 ResultSet 中取出数字并将它们放入一个数组中。

第二个功能:

def getMainNums():
    headers = {'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36 Edg/88.0.705.53'}
    r = requests.get(url, headers=headers)
    soup = BeautifulSoup(r.text, 'html.parser')
    numdict = {
    '0': soup.find('ul', {'class' : 'numbers'}).find_all('li')[0].text,
    '1': soup.find('ul', {'class' : 'numbers'}).find_all('li')[1].text,
    '2': soup.find('ul', {'class' : 'numbers'}).find_all('li')[2].text,
    '3': soup.find('ul', {'class' : 'numbers'}).find_all('li')[3].text,
    '4': soup.find('ul', {'class' : 'numbers'}).find_all('li')[4].text,
    '5': soup.find('ul', {'class' : 'numbers'}).find_all('li')[5].text,
    '6': soup.find('ul', {'class' : 'numbers'}).find_all('li')[6].text,
    }
    return numdict

第二个函数从列表的第一个实例中提取数字,我知道这就是我要求它做的事情。我想要求它从每个列表中获取它们 - 通常每页大约有 100 个。

理想情况下,我会在每个单独的列表中使用第二个函数 - 或者使用第一个函数,我会将数字与 ResultSet 列表输出分开并将它们放入一个数组中(或者像我一样使用 .text在第二个函数中)。

【问题讨论】:

    标签: python beautifulsoup


    【解决方案1】:

    您可以在一个函数中完成所需的一切。我将向您展示两个&lt;ul&gt;s 的示例。

    import requests
    from bs4 import BeautifulSoup
    
    text = '''
    <ul class="numbers">
        <li class="result">11</li>
        <li class="result">13</li>
        <li class="result">14</li>
        <li class="result">27</li>
        <li class="result">40</li>
        <li class="result">41</li>
        <li class="addresult">23</li>
    </ul>
    <ul class="numbers">
        <li class="result">1</li>
        <li class="result">20</li>
        <li class="result">31</li>
        <li class="result">07</li>
        <li class="result">50</li>
        <li class="result">19</li>
        <li class="addresult">23</li>
    </ul>
    '''
    
    def getNums():
        soup = BeautifulSoup(text, 'html.parser')
        uls = soup.find_all('ul', {'class' : 'numbers'})
    
        num_dict = {}
        for count_of_uls, each_ul in enumerate(uls):
            each_dict = {}
            for count_of_lis, num in enumerate(each_ul.find_all('li', class_='result')):
                each_dict[str(count_of_lis)] = num.text
    
            num_dict[str(count_of_uls)] = each_dict
    
        return num_dict
    

    此代码所做的只是遍历uls 列表,然后为每个ul 找到所有&lt;li&gt; 标记并将其值添加到字典中。最后将个人uls 的每个字典添加到最终num_dict。结果如下所示:

    {'0': {'0': '11', '1': '13', '2': '14', '3': '27', '4': '40', '5': '41'},
     '1': {'0': '1', '1': '20', '2': '31', '3': '07', '4': '50', '5': '19'}}
    

    【讨论】:

      猜你喜欢
      • 2021-11-14
      • 1970-01-01
      • 1970-01-01
      • 2017-08-10
      • 1970-01-01
      • 1970-01-01
      • 2019-06-20
      • 2019-01-15
      • 2021-02-14
      相关资源
      最近更新 更多