【问题标题】:How to append data in to the dataframe如何将数据附加到数据框中
【发布时间】:2022-01-20 22:37:14
【问题描述】:
import requests
from bs4 import BeautifulSoup
import pandas as pd
baseurl='https://twillmkt.com'
headers ={
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36'
}
r =requests.get('https://twillmkt.com/collections/denim')
soup=BeautifulSoup(r.content, 'html.parser')
tra = soup.find_all('div',class_='ProductItem__Wrapper')
productlinks=[]
for links in tra:
    for link in links.find_all('a',href=True):
        comp=baseurl+link['href']
        productlinks.append(comp)
temp=[]
for link in productlinks:
    r =requests.get(link,headers=headers)
    soup=BeautifulSoup(r.content, 'html.parser')
    up = soup.find('div',class_='Product__SlideshowNavScroller')
    for pro in up:
        t=pro.find('img').get('src')
        print(t)

代码运行良好并给我图片链接,但我想给名字image1、image2 等等以获得像你在图片中看到的这样的输出

【问题讨论】:

    标签: python dataframe web-scraping beautifulsoup


    【解决方案1】:

    注意 主要问题是,每页的图片数量不同,并且您多次调用产品页面,因为您的链接列表中有重复项 - 最后可能被set()列表避免

    一种方法是将您的数据附加到字典列表以创建数据框。

    data.append({'id':t.split('=')[-1], 'image':'Image '+str(e)+' UI','link':t})
    

    如果没有图像源,请使用方法pivot() 进行转换和fillna() 生成空单元格,以获得您想要的修改。

    df.pivot(index='id', columns='image', values='link').reset_index().fillna('')
    

    示例

    import requests
    from bs4 import BeautifulSoup
    import pandas as pd
    baseurl='https://twillmkt.com'
    headers ={
        'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36'
    }
    r =requests.get('https://twillmkt.com/collections/denim')
    soup=BeautifulSoup(r.content, 'html.parser')
    tra = soup.find_all('div',class_='ProductItem__Wrapper')
    productlinks=[]
    for links in tra:
        for link in links.find_all('a',href=True):
            comp=baseurl+link['href']
            productlinks.append(comp)
    
    data = []
    
    for link in set(productlinks):
        r =requests.get(link,headers=headers)
        soup=BeautifulSoup(r.content, 'html.parser')
        up = soup.find('div',class_='Product__SlideshowNavScroller')
        for e,pro in enumerate(up):
            t=pro.find('img').get('src')
            data.append({'id':t.split('=')[-1], 'image':'Image '+str(e)+' UI','link':t})
            
    df = pd.DataFrame(data)
    df.image=pd.Categorical(df.image,categories=df.image.unique(),ordered=True)
    df = df.pivot(index='id', columns='image', values='link').reset_index().fillna('')
    

    输出

    id Image 0 UI Image 1 UI Image 2 UI ...
    1631812617 //cdn.shopify.com/s/files/1/0089/7912/0206/products/Blue-Ripped-Knee-Distressed-Skinny-Denim_160x.jpg?v=1631812617 //cdn.shopify.com/s/files/1/0089/7912/0206/products/Blue-Ripped-Knee-Distressed-Skinny-Denim-2_160x.jpg?v=1631812617 //cdn.shopify.com/s/files/1/0089/7912/0206/products/Blue-Ripped-Knee-Distressed-Skinny-Denim-3_160x.jpg?v=1631812617
    1631826938 //cdn.shopify.com/s/files/1/0089/7912/0206/products/Light-Blue-Patch-Work-Stacked-Straight-Leg-Denim_160x.jpg?v=1631826938 //cdn.shopify.com/s/files/1/0089/7912/0206/products/Light-Blue-Patch-Work-Stacked-Straight-Leg-Denim-2_160x.jpg?v=1631826938 //cdn.shopify.com/s/files/1/0089/7912/0206/products/Light-Blue-Patch-Work-Stacked-Straight-Leg-Denim-3_160x.jpg?v=1631826938
    1631829399 //cdn.shopify.com/s/files/1/0089/7912/0206/products/Khaki-Patch-Work-Stacked-Straight-Leg-Denim_160x.jpg?v=1631829399 //cdn.shopify.com/s/files/1/0089/7912/0206/products/Khaki-Patch-Work-Stacked-Straight-Leg-Denim-2_160x.jpg?v=1631829399 //cdn.shopify.com/s/files/1/0089/7912/0206/products/Khaki-Patch-Work-Stacked-Straight-Leg-Denim-3_160x.jpg?v=1631829399
    ...

    【讨论】:

    • 如果我们只得到10 images 我们如何应用限制
    • 不确定你的意思 - 如果你只想从 df 查看 10 个图像列 --> df.iloc[:,:12] - 如果你想限制 for 循环 --> for e,pro in enumerate(up[:10]): 每个问题都应该只解决一个问题,[应该提出一个新问题 ](stackoverflow.com/questions/ask) 对于每个其他问题。 太好了 - 谢谢
    • 我创建新问题请在这些stackoverflow.com/questions/70461816/…中提供帮助
    • 你能帮我解决这些问题吗?
    猜你喜欢
    • 2021-11-25
    • 2018-10-13
    • 2019-01-14
    • 2018-02-13
    • 2014-01-08
    • 1970-01-01
    • 2020-03-08
    • 2021-06-06
    • 1970-01-01
    相关资源
    最近更新 更多