我正在嘗試使用正文、標題和日期列來抓取和排序文章。但是,在提取日期時,我遇到了時區錯誤:
ValueError: time data 'Jun 1, 2022 2:49PM EDT' does not match format '%b %d, %Y %H:%M%p %z'
我的代碼如下:
def get_info(url):
headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.102 Safari/537.36'}
response = requests.get(url, headers=headers)
soup = BeautifulSoup(response.text)
news = soup.find('div', attrs={'class': 'body__content'}).text
headline = soup.find('h1').text
date = datetime.datetime.strptime(soup.find('time').text, "%b %d, %Y %H:%M%p %z")
columns = [news, headline, date]
column_names = ['News','Headline','Date']
return dict(zip(column_names, columns))
有沒有辦法以類似的方法獲取時區,或者只是整體放棄?
uj5u.com熱心網友回復:
注意 strptime() 中的 %z 用于時區偏移而不是名稱,并且 %Z 僅接受時區的某些值。有關詳細資訊,請參閱API 檔案。
最簡單的選擇是使用dateparser模塊來決議帶有時區名稱的日期(例如 EDT)。
import dateparser
s = "Jun 1, 2022 2:49PM EDT"
d = dateparser.parse(s)
print(d)
輸出:
2022-06-01 14:49:00-04:00
許多日期模塊(例如dateutil和pytz)都為“EST”、“PST”等定義了時區偏移量,但“EDT”不太常見。這些模塊需要您將時區定義為 UTC-04:00。
import dateutil.parser
s = "Jun 1, 2022 2:49PM EDT"
tzinfos = {"EDT": -14400}
d = dateutil.parser.parse(s, tzinfos=tzinfos)
print(d)
輸出:
2022-06-01 14:49:00-04:00
uj5u.com熱心網友回復:
作為@CodeMonkey 解決方案的替代方案,您也可以通過 pandas 嘗試它:
pd.to_datetime('Jun 1, 2022 2:49PM EDT').tz_localize('US/Eastern')
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/487183.html
上一篇:合并和排序日期時間列
