Python 尝试使用for循环和append列表将图像URL添加到Web垃圾处理列表中

Python 尝试使用for循环和append列表将图像URL添加到Web垃圾处理列表中,python,list,web-scraping,Python,List,Web Scraping,下面的代码产生了一个逻辑错误。我试图简单地刮取图像URL并将其放入列表中,然后返回列表(其中应包含多个图像URL) 代码: 在使用变量images(返回函数结果)呈现home.html页面时,我得到 我试过: for image in images: images=image['src']+'\n') return images 但这只返回第一个图像URL 有人能指出错误吗 def imagescrape(): final_images=[]

下面的代码产生了一个逻辑错误。我试图简单地刮取图像URL并将其放入列表中,然后返回列表(其中应包含多个图像URL)

代码:

在使用变量
images
(返回函数结果)呈现home.html页面时,我得到

我试过:

    for image in images: 
        images=image['src']+'\n')
    return images
但这只返回第一个图像URL

有人能指出错误吗

def imagescrape():
    final_images=[]
    html = urlopen('https://en.wikipedia.org/wiki/Prince_Harry,_Duke_of_Sussex')
    bs = BeautifulSoup(html, 'html.parser')
    images = bs.find_all('img', {'src':re.compile('.jpg')})
    for image in images: 
        final_images.append(image['src']+'\n')
    return final_images
我得到

这是因为:

列表的
append
方法返回
None
,因此将其分配给
images
会将其设置为
None
(然而,让我惊讶的是,这不会给出错误,因为
image
不是列表,甚至没有
append
方法)


您似乎对所选择的变量名以及遍历列表和附加到列表的工作方式感到有点困惑

应该有两个列表,您都将其命名为
images

  • 在循环中建立并最终返回的列表
  • bs.find_all的结果
  • 以下是您应该如何正确执行此操作:

    def imagescrape():
        # List 1 (TARGET):
        result_images=[]
        html = urlopen('https://en.wikipedia.org/wiki/Prince_Harry,_Duke_of_Sussex')
        bs = BeautifulSoup(html, 'html.parser')
        # List 2 (SOURCE):
        images = bs.find_all('img', {'src':re.compile('.jpg')})
        for image in images:
                   # ^^^^^^ SOURCE list
            result_images.append(image['src']+'\n')
          # ^^^^^^^^^^^^^ TARGET list
        return result_images
    

    如果你有一个模式

    target_list = []
    for item in source_list:
        target_list.append(process(item))
    
    您还可以将其转换为列表:

    target_list = [process(item) for item in source_list]
    
    在您的情况下,您可以按如下方式应用此代码,这使代码在我看来更加清晰:

    def imagescrape():
        html = urlopen('https://en.wikipedia.org/wiki/Prince_Harry,_Duke_of_Sussex')
        bs = BeautifulSoup(html, 'html.parser')
        images = bs.find_all('img', {'src':re.compile('.jpg')})
        return [image['src']+'\n' for image in images]
    
    我得到

    这是因为:

    列表的
    append
    方法返回
    None
    ,因此将其分配给
    images
    会将其设置为
    None
    (然而,让我惊讶的是,这不会给出错误,因为
    image
    不是列表,甚至没有
    append
    方法)


    您似乎对所选择的变量名以及遍历列表和附加到列表的工作方式感到有点困惑

    应该有两个列表,您都将其命名为
    images

  • 在循环中建立并最终返回的列表
  • bs.find_all的结果
  • 以下是您应该如何正确执行此操作:

    def imagescrape():
        # List 1 (TARGET):
        result_images=[]
        html = urlopen('https://en.wikipedia.org/wiki/Prince_Harry,_Duke_of_Sussex')
        bs = BeautifulSoup(html, 'html.parser')
        # List 2 (SOURCE):
        images = bs.find_all('img', {'src':re.compile('.jpg')})
        for image in images:
                   # ^^^^^^ SOURCE list
            result_images.append(image['src']+'\n')
          # ^^^^^^^^^^^^^ TARGET list
        return result_images
    

    如果你有一个模式

    target_list = []
    for item in source_list:
        target_list.append(process(item))
    
    您还可以将其转换为列表:

    target_list = [process(item) for item in source_list]
    
    在您的情况下,您可以按如下方式应用此代码,这使代码在我看来更加清晰:

    def imagescrape():
        html = urlopen('https://en.wikipedia.org/wiki/Prince_Harry,_Duke_of_Sussex')
        bs = BeautifulSoup(html, 'html.parser')
        images = bs.find_all('img', {'src':re.compile('.jpg')})
        return [image['src']+'\n' for image in images]