Python bs4 -从所有列表中查找文本



我有两个功能,从网站刮数字。两者都没有得到期望的输出,但它们很接近。我知道我错过了一些明显的东西。

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,就像我在第二个函数中那样)。

您可以在一个函数中完成所有需要的操作。我将向您展示两个<ul>的示例。

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找到所有<li>标记并将其值添加到字典中。最后将每个ul的字典添加到最终的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'}}

最新更新