<p>因此,首先,我们将一个iterable传递给<code>writerow</code>方法,然后该iterable中的每个对象都将被写为用逗号分隔它们。所以如果你给它一个字符串,那么每个字符就会被分开:</p>
<pre><code>WriteResultsFile.writerow('hello there')
</code></pre>
<p>写</p>
^{pr2}$
<p>但是</p>
<pre><code>WriteResultsFile.writerow(['hello', 'there'])
</code></pre>
<p>写</p>
<pre><code>hello,there
</code></pre>
<p>这就是为什么你得到的结果</p>
<pre><code>n,e,w,-,y,o,r,k,-,c,i,t,y,-,4,8,%
</code></pre>
<p>你剩下的问题都是你的网络错误。首先,当我浏览站点时,用CSS类“comparison”搜索表会得到<code>None</code>。所以我不得不用</p>
<pre><code>expatistan_table = soup_expatistan.find("table","comparison")
</code></pre>
<p>现在,你的“如果声明被破坏”是因为</p>
<pre><code>percent_difference.span['class']
</code></pre>
<p>返回一个列表。如果我们把它改成</p>
<p>百分比_差异.span['class'][0]</p>
<p>事情会按你期望的方式进行。在</p>
<p>现在,您真正的问题是在最里面的循环中,您会发现单个项目的价格变化百分比。您希望这些项目作为价格差异行中的项目,而不是单个行。因此,我声明一个空列表<code>items</code>,并将<code>percent_difference.span.string</code>附加到该列表中,然后在最内层的循环外写入该行,如下所示:</p>
<pre><code>items = []
for expatistan_title in expatistan_titles:
percent_difference = expatistan_title.find("th","percent")
percent_difference_title = percent_difference.span["class"][0]
print percent_difference_title
if percent_difference_title == "expensiver":
items.append('+' + percent_difference.span.string)
else:
items.append('-' + percent_difference.span.string)
row = [Textfilelistsplit[i]]
row.extend(items)
WriteResultsFile.writerow(row)
</code></pre>
<p>最后一个错误是,在<code>while</code>循环中,您重新打开csv文件,并覆盖所有内容,因此最后只有最后一个城市。对所有这些错误(其中许多错误您应该可以在没有帮助的情况下找到)留给我们的是:</p>
<pre><code>#Prepare CSV writer.
WriteResultsFile = csv.writer(open("Expatistan.csv","w"))
i=0
while i<len(Textfilelistsplit):
url = "http://www.expatistan.com/cost-of-living/comparison/" + HomeCity + "/" + Textfilelistsplit[i]
page = requests.get(url).text
print url
soup_expatistan = BeautifulSoup(page)
WriteResultsFile.writerow(["City","Food","Housing","Clothes","Transportation","Personal Care", "Entertainment"])
expatistan_table = soup_expatistan.find("table","comparison")
expatistan_titles = expatistan_table.find_all("tr","expandable")
items = []
for expatistan_title in expatistan_titles:
percent_difference = expatistan_title.find("th","percent")
percent_difference_title = percent_difference.span["class"][0]
print percent_difference_title
if percent_difference_title == "expensiver":
items.append('+' + percent_difference.span.string)
else:
items.append('-' + percent_difference.span.string)
row = [Textfilelistsplit[i]]
row.extend(items)
WriteResultsFile.writerow(row)
i+=1
</code></pre>