【问题标题】:Output from webscraped page not appended to output from previous page网页抓取页面的输出未附加到上一页的输出
【发布时间】:2020-10-16 05:01:23
【问题描述】:

与我的上一个问题类似,我遇到了迭代问题。我正在使用代码

df1 = pd.DataFrame({'Username': [name.text for name in (soup.findAll('p',{'class':'profile-name'}))]})

从一个网页中获取名称列表。但是,当我对所有页面尝试此操作时,它会为每个页面创建新表,而不是将每个页面的输出附加在一起。

所以对于第 1 页,我会得到

       Username
 0     Alice
 1     Bob
 2     Carl

第 2 页:

       Username
 0     Sandra
 1     Paula
 2     Tim

等等。但我希望我的输出是:

       Username
 0     Alice
 1     Bob
 2     Car
 3     Sandra
 4     Paula
 5     Tim

以下是我用于遍历所有页面的完整代码(省略了 url)

for pageno in range(0,99):
    page=requests.get('full url'+ str(pageno))
    soup=BeautifulSoup(page.text, 'html.parser')
    df1 = pd.DataFrame({'Username': [name.text for name in (soup.findAll('p',{'class':'profile-name'}))]})

我该如何解决这个问题?

谢谢。

【问题讨论】:

    标签: python pandas dataframe web-scraping


    【解决方案1】:

    您的问题是您在每个循环中创建一个新的df,因此不会保留以前页面的记录。

    您可能希望将用户名附加到全局列表中,然后将该列表导入数据框中:

      username_list = []
      for pageno in range(0,99):
          page=requests.get('full url'+ str(pageno))
          soup=BeautifulSoup(page.text, 'html.parser')
          username_list += [name.text for name in (soup.findAll('p',{'class':'profile-name'}))]
    
      df1 = pd.DataFrame({'Username':  username_list})
    

    【讨论】:

      【解决方案2】:

      这个问题很不清楚,但我想这就是你想要的?

      output_df = pd.DataFrame()
      for pageno in range(0,99):
          page=requests.get('full url'+ str(pageno))
          soup=BeautifulSoup(page.text, 'html.parser')
          df1 = pd.DataFrame({'Username': [name.text for name in (soup.findAll('p',{'class':'profile-name'}))]})
          output_df = pd.concat([output_df, df1])
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-05-05
        • 1970-01-01
        • 2014-12-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多