2017-05-09 41 views
-1

當我運行我的腳本時,我可以看到兩個打印語句(如下所示)帶來了所需的結果。無法區分兩者之間的差異

但是,我的問題是:如果我可以在腳本中使用第8行[Title]語句(我的意思是使用風格)得到結果,那麼爲什麼我應該爲你的第10行[Name]語句可以看到內部已經使用了for循環。

我已經看到了幾個不同的腳本,其中我在第10行[名稱]中使用的方式正在蓬勃發展。兩者有什麼區別?

import requests 
from bs4 import BeautifulSoup 
url = "https://www.yellowpages.com/search?search_terms=pizza&geo_location_terms=Los+Angeles%2C+CA" 
req = requests.get(url) 
bsObj = BeautifulSoup(req.text,"lxml") 
Items=bsObj.findAll("div",{"class":"info"}) 
for product in Items: 

    Title=product.findAll("a",{"class":"business-name"})[0].text 
    print(Title) 

    Name=[item for item in product.findAll("a",{"class":"business-name"})][0].text 
    print(Name) 
+1

列表理解在這裏沒有任何意義,因爲['findAll'](https://www.crummy.com/software/BeautifulSoup/bs4/doc/index.html?highlight=findall#find-all)返回列表,並且您沒有對其元素進行任何操作 –

+1

您的listcomp僅生成'findAll()'結果的副本。這完全沒有必要。 – SiHa

回答

1

在第一條語句的findAll方法返回一個迭代,並從您要選擇的第一個項目([0])。 對於具有列表理解的第二個,您首先創建一個列表,其中包含遍歷來自iterable的所有元素,然後再次選擇第一個元素,這將產生相同的結果。

順便說一句,你仍然可以使用find()方法或find_all(limit=1)而不是掃描整個對象。