我一直在使用 Python 和 RSS feed 探索网络抓取技术,但我不确定如何将搜索结果缩小到 Google 新闻上的特定年份。理想情况下,我想检索特定年份(例如 2020 年)新闻文章的标题、发布日期和可能的摘要。使用下面提供的代码,我可以抓取当前数据,但如果我尝试查找特定年份的新闻,则该数据不可用。即使当我使用 Google 文章搜索框时,过滤器也只显示前一年的结果。但是,当我向下滚动时,我可以看到 2013 年和 2017 年的文章。有人可以为我提供一个 Python 脚本或有关如何解决此问题的指针吗?
这是我到目前为止所做的尝试:
import feedparser
import pandas as pd
from datetime import datetime
class GoogleNewsFeedScraper:
def __init__(self, query):
self.query = query
def scrape_google_news_feed(self):
formatted_query = '%20'.join(self.query.split())
rss_url = f'https://news.google.com/rss/search?q={formatted_query}&hl=en-IN&gl=IN&ceid=IN%3Aen'
feed = feedparser.parse(rss_url)
titles = []
links = []
pubdates = []
if feed.entries:
for entry in feed.entries:
# Title
title = entry.title
titles.append(title)
# URL link
link = entry.link
links.append(link)
# Date
pubdate = entry.published
date_str = str(pubdate)
date_obj = datetime.strptime(date_str, "%a, %d %b %Y %H:%M:%S %Z")
formatted_date = date_obj.strftime("%Y-%m-%d")
pubdates.append(formatted_date)
else:
print("Nothing Found!")
data = {'URL link': links, 'Title': titles, 'Date': pubdates}
return data
def convert_data_to_csv(self):
d1 = self.scrape_google_news_feed()
df = pd.DataFrame(d1)
csv_name = self.query + ".csv"
csv_name_new = csv_name.replace(" ", "_")
df.to_csv(csv_name_new, index=False)
if __name__ == "__main__":
query = 'forex rate news'
scraper = GoogleNewsFeedScraper(query)
scraper.convert_data_to_csv()
您可以在 rss_url 中使用日期过滤器。 将查询部分修改为以下格式
格式:
q=query+after:yyyy-mm-dd+before:yyyy-mm-dd
上面的 URL 返回 2023 年 11 月 1 日至 2023 年 12 月 1 日期间发布的与 外汇汇率新闻 相关的文章。
请参阅这篇文章了解更多信息。