首页 > 解决方案 > 如何在给定外部网站条件的情况下自动更新熊猫数据框?

问题描述

这是目标网站:https ://www.mobihealthnews.com/news?page=0

我创建了一个 python 函数来从新闻页面中抓取所有信息并将所有内容存储在 pandas 数据框中,如下所示:

def scrape_global_news(url):            
    soup = BeautifulSoup(requests.get(url).content, 'html.parser')
    frame=[]
    filename="global_mobi_health_news.xlxs"
    f=open(filename,"w", encoding = 'utf-8')

    for row in soup.select('.group-left .views-row'):
        Region = "Global"
        Title = row.select_one('.views-field-title').get_text(strip=True)
        Content = row.select_one('.views-field-body').get_text(strip=True)
        Link = 'https://www.mobihealthnews.com' + row.a['href']
        Date = row.select_one('.day_list').get_text(strip=True)
        Author = row.select_one('.author_list').get_text(strip=True)
        frame.append((Region,Title,Content,Date,Link,Author))
        f.write(Title.replace(",","^")+","+Link+","+Author.replace(",","^")+","+Content.replace(",","^")+","+Date.replace(",","^")+"\n")
    f.close()
    df_global=pd.DataFrame(frame, columns=['Region','Title','Summarized Content','Creation Date','Source','Author Name'])
    return df_global
scrape_global_news('https://www.mobihealthnews.com/news?page=0')

在下图中,有最终结果:

df 包含所有抓取的信息

现在,我遇到了两个主要问题:

  1. 添加并实现一项功能以检查上面的网页内是否有新文章(即df_global.Title[0] =! Title ],如果此条件为真,则scrape_global_news在第一个数据框的行中添加具有该功能的新文章。

  2. 使此脚本每 24 小时自动运行一次,并将其部署在云服务提供商 (?) 中。关于这一点,我不太确定是否需要适当的云服务。

感谢您的时间。

编辑:为了更好地解释 #1 问题:

当我昨天(07/21/2020)发布问题时,第一行是上面链接的网站中的最新文章(即最新文章)。如果您今天查看网站,顶部还有 4 篇品牌新闻文章(这个数字很可能每天都在增加)。我想从网站内的 4 篇新文章中获取信息(使用“scrape_global_news”功能)并将它们存储在数据框的顶部。最终的范围是从最近的文章到最近的文章排序

标签: python-3.xweb-scrapingbeautifulsoup

解决方案


您能否详细说明问题#1?

对于问题 2。您可以在基于 Linux 的 VPS 上运行它并使用 cronjobs 进行调度,或者您可以使用 AWS Lambda 函数,如果您将结果保存在外部数据库中。


推荐阅读