2017-10-04 93 views
-1

你好,我是Python新手,想弄清楚为什么我的列表每当新的页面在while循环中被加载和刮取时都会覆盖前面的元素。先谢谢你。Python - 之前的列表元素在while循环期间被新元素覆盖

def scrapeurls(): 
    domain = "https://domain234dd.com" 
    count = 0 

    while count < 10: 

     page = requests.get("{}{}".format(domain, count)) 
     soup = BeautifulSoup(page.content, 'html.parser') 
     data = soup.findAll('div', attrs={'class': 'video'}) 

     urls = [] 

     for div in data: 
      links = div.findAll('a') 
      for a in links: 
       urls.append(a['href']) 
       print(a['href']) 

     print(count) 
     count += 1 
+2

举动'urls'列表出来的'while'循环 – RomanPerekhrest

+0

感谢,严重的小白错误 – MethodMan

回答

3

因为您在每次迭代循环中将urls重置为空列表。你应该把它移到循环之前。

(注意,整个事情会更好表示为一个循环。)

+1

哇即时白痴,太感谢你了 – MethodMan

3

您需要循环之前初始化URL列表。如果你在循环中初始化它,它会将它设置为每次都没有。

+0

哈哈不,我是初学者太我花了一个多小时昨天困惑因为我的声明不会打开文件。我忘了在()'之前打开。大声笑它发生在每个人。 (我希望) – Dan

1
domain = "https://domain234dd.com" 
count = 0 

urls = [] 
while count < 10: 

    page = requests.get("{}{}".format(domain, count)) 
    soup = BeautifulSoup(page.content, 'html.parser') 
    data = soup.findAll('div', attrs={'class': 'video'}) 

    for div in data: 
     links = div.findAll('a') 
     for a in links: 
      urls.append(a['href']) 
      print(a['href']) 

    print(count) 
    count += 1