我使用打印出结果的 For 循环从站点抓取了地址数据。我想将每个 For 循环的所有结果输出到 CSV 文件中的单独列中。当我尝试输出时,我只通过 For 循环获得最后一次迭代,并且包含所有庞大的 HTML 代码。 print street.text
打印位于具有 itemprop = address
的所有 span 标签内的所有数据。
到目前为止,这是我的代码:
soup = BeautifulSoup(response, "lxml");
for address in soup.find_all('span', {'itemprop' : 'address'}):
print address.text
有问题的 HTML:
<span itemprop="address" itemscope="" itemtype="http://schema.org/PostalAddress" id="yui_3_15_0_1_1405702066072_1576"><a href="/homedetails/403-James-Toney-Dr-Elon-NC-27244/96315551_zpid/" class="hdp-link routable" title="403 James Toney Dr, Elon, NC Real Estate" id="yui_3_15_0_1_1405702066072_1575"><span itemprop="streetAddress" id="yui_3_15_0_1_1405702066072_1574">403 James Toney Dr</span>, <span itemprop="addressLocality">Elon</span>, <span itemprop="addressRegion" id="yui_3_15_0_1_1405702066072_1580">NC</span><span itemprop="postalCode" class="hide">27244</span></a></span>
这将按顺序打印所有数据。但是我需要将每个地址实例放入 CSV 列中。这可能吗?我在想我需要一种方法来在循环迭代时将每个地址存储到一个变量中,但我读到这可能不是一个好的解决方案。我浏览了几个试图找出解决方案的网站。我觉得它应该很简单,我就是想不通。
编辑:我只能使用 1 个循环来获取我需要的所有信息。希望这能让问题更简单。
一般情况下你需要给出一个HTML的例子才能给出正确答案。
在特殊情况下,总是有完全相同的数量并且它们按顺序关联,您可以使用 zip
函数,例如
streets = [street.text for street in soup.find_all(...)
towns = ....
states = ....
zips = ....
recs = zip(streets,towns,states,zips)
c = csv.writer(...)
for rec in recs:
c.writerow(rec)
我是一名优秀的程序员,十分优秀!