Я написал код Python для анализа веб-страницы с помощью Beautiful Soup.
Как только код был закончен, я начал удалять ненужные переменные и строки.
Я также пытаюсь удалить циклы, если возможно.
Например, я хотел бы заменить эти два цикла (которые находятся в двух разных файлах) однострочным кодом (например, len(an object)
):
(1) Количество <li>
всего <ul>
response = requests.get(url)
soup = BeautifulSoup(response.text, "html.parser")
list = soup.find_all('ul',{'class':'class-name'})
counter = 0
for ul in list:
for li in ul:
counter += 1
где list
объект - что-то вроде этого
[<ul class="class-name">
<li class="section"><a href="...">...</a></li>
<li class="section"><a href="...">...</a></li>
<li class="section"><a href="...">...</a></li></ul>,
<ul class="class-name">
<li class="section"><a href="...">...</a></li>
<li class="section"><a href="...">...</a></li></ul>]
(2) Подсчитать все конкретные <a>
response = requests.get(url)
soup = BeautifulSoup(response.text, "html.parser")
list = soup.find('table',{'class':'class-name'}).find_all('a')
counter = 0
for el in list:
if el.contents[0] != 'Train':
counter += 1
где list
что-то вроде
[<a href="…">Train</a>,
<a href="…">Car</a>,
<a href="…">Plane</a>]
Что я пробовал
Использование numpy
, но команды np.array(list)
и np.asarray(list)
выдают ошибку в обоих случаях:
Traceback (most recent call last):
File "<pyshell#9>", line 1, in <module>
np.array(list)
File "C:\...\Python37-32\lib\site-packages\bs4\element.py", line 1016, in __getitem__
return self.attrs[key]
KeyError: 0
В случае (2) я пытался использовать нотацию слайса для извлечения элемента за элементом, но такие команды, как list[1:3]
, возвращают другой массив. Так, например, этот код, который является попыткой получить total length minus the number of elements whose contents[0] is 'Train'
, не работает:
counter = len(list) - (list[:].contents[0] == 'Train')
Можно ли заменить два цикла однострочным кодом?