<p>想想这条代码的作用:</p>
<pre><code>def soup():
for url in url_list:
sauce = urllib.request.urlopen(url)
for things in sauce:
soup_maker = BeautifulSoup(things, 'html.parser')
return soup_maker
</code></pre>
<p>我给你举个例子:</p>
^{pr2}$
<p><code>url_list = ['one', 'two', 'three']</code>的输出是:</p>
<pre><code>one
('one', 'a')
</code></pre>
<p>你现在看到了吗?怎么回事?在</p>
<p>基本上,soup函数在第一个返回<code>return</code>-不要返回任何迭代器,任何列表;只有第一个<code>BeautifulSoup</code>-这是iterable的幸运(或不幸运):)</p>
<p>所以改变代码:</p>
<pre><code>def soup3():
soups = []
for url in url_list:
print(url)
for thing in ['a', 'b', 'c']:
print(url, thing)
maker = 2 * thing
soups.append(maker)
return soups
</code></pre>
<p>然后输出为:</p>
<pre><code>one
('one', 'a')
('one', 'b')
('one', 'c')
two
('two', 'a')
('two', 'b')
('two', 'c')
three
('three', 'a')
('three', 'b')
('three', 'c')
</code></pre>
<p>但我相信这也行不通:)只是想知道sauce返回的是什么:<code>sauce = urllib.request.urlopen(url)</code>实际上你的代码在迭代什么:<code>for things in sauce</code>-意味着<code>things</code>是什么意思。在</p>
<p>快乐的编码。在</p>