试图通过网络搜集一个房地产清单,并进入以下阶段:
import bs4
from urllib.request import urlopen as Open
from urllib.request import Request
from bs4 import BeautifulSoup as soup
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.3"}
my_url = "https://www.otodom.pl/oferta/narozne-2-pokoje-nowa-inwestycja-0-ID43FH9.html"
req = Request(url=my_url, headers=headers)
html = Open(req).read()
# get property features
container = page_soup.find("section", {"class":"section-overview"}).findNext("div").ul.findAll("li")
for contain in container:
if "Rynek" in contain.text:
rynek = contain.text.split(":")[1]
break
else:
rynek = "N/A"
for contain in container:
if "Materiał budynku" in contain.text:
material_budynku = contain.text.split(":")[1]
break
else:
material_budynku = "N/A"
print(
rynek,
material_budynku,
)
每个清单都有许多列出的功能,共有40多个独特功能。在上面的代码中,我只说了两个示例,一个是当前功能,另一个是缺失。
最终目标是使网络抓取功能浏览所有功能的列表,并检查它们是否存在。如果是,则使用-feature变量;否则,则使用通用的“ N / A”。
我可能只做40次以下迭代...
for contain in container:
if "Materiał budynku" in contain.text:
material_budynku = contain.text.split(":")[1]
break
else:
material_budynku = "N/A"
...但是我想知道是否有更整洁的方式?
答案 0 :(得分:1)
怎么样?
features = []
for feature in ["Rynek", "Materiał budynku"]:
for contain in container:
if feature in contain.text:
features.append(contain.text.split(":")[1])
break
else: # if we didn't break
features.append("N/A")
print(*features)
我们没有逐一列出功能,而是简单地遍历它们。我们要做的唯一有点奇怪的事情就是使用鲜为人知的for循环else
分支,通过它可以测试我们是否发现了一个功能。