<p><code>csv.writer.writerow()</code>接受一个序列,并使每个元素成为一个列;通常,您将给它一个带有列的<em>列表</em>,但您将传递字符串;这将添加<em>单个字符</em>作为列。在</p>
<p>只需构建一个列表,<em>然后</em>将其写入CSV文件。在</p>
<p>首先,打开CSV文件<strong>一次</strong>,而不是针对每个单独的城市;每次打开时,您都会清除该文件。在</p>
<pre><code>import requests
import csv
from bs4 import BeautifulSoup
HomeCity = 'Phoenix'
with open("City.txt") as cities, open("Expatistan.csv", "wb") as outfile:
writer = csv.writer(outfile)
writer.writerow(["City", "Food", "Housing", "Clothes",
"Transportation", "Personal Care", "Entertainment"])
for line in cities:
city = line.strip()
url = "http://www.expatistan.com/cost-of-living/comparison/{}/{}".format(
HomeCity, city)
resp = requests.get(url)
soup = BeautifulSoup(resp.content, from_encoding=resp.encoding)
titles = soup.select("table.comparison tr.expandable")
row = [city]
for title in titles:
percent_difference = title.find("th", class_="percent")
changeclass = percent_difference.span['class']
change = percent_difference.span.string
if "expensiver" in changeclass:
change = '+' + change
else:
change = '-' + change
row.append(change)
writer.writerow(row)
</code></pre>