我编写了Python代码来通过Beautiful Soup分析网页。
代码完成后,我开始删除不必要的变量和行。
如果可能的话,我也正在尝试删除for循环。
例如,我想用一个行代码(例如len(an object)
)替换这两个循环(在两个不同的文件中):
<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>]
<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')
是否可以用一个行代码替换两个循环?
答案 0 :(得分:1)
对于第一个循环:
counter = sum(1 for ul in list for li in ul)
第二个:
counter = sum(1 for el in list if el.contents[0] != 'Train')
答案 1 :(得分:1)