If you scrape the divs with categoryArticle__content
you can pull the links and the associated dates:
import requests
from bs4 import BeautifulSoup
soup = BeautifulSoup(requests.get("http://oilprice.com/Latest-Energy-News/World-News").content)
main_div = soup.select_one("div.tableGrid__column.tableGrid__column--articleContent.category")
divs = main_div.select('div.categoryArticle__content')
print([(d.select_one("p.categoryArticle__meta").text, d.a["href"]) for d in divs])
The text also includes more than just the date so you will want to split on a pipe char:
[(d.select_one("p.categoryArticle__meta").text.split("|")[0].strip(), d.a["href"]) for d in divs]
Which gives you:
[(u'May 11, 2016 at 17:21', 'http://oilprice.com/Latest-Energy-News/World-News/Oil-Hits-6-Month-High-on-Crude-Inventory-Draw.html'), (u'May 11, 2016 at 16:56', 'http://oilprice.com/Latest-Energy-News/World-News/Nigerian-President-Lashes-Out-At-UK-Over-Stolen-Assets.html'), (u'May 11, 2016 at 15:41', 'http://oilprice.com/Latest-Energy-News/World-News/Germany-Ups-Gazprom-Imports-by-19-percent-in-Q1.html'), (u'May 11, 2016 at 15:39', 'http://oilprice.com/Latest-Energy-News/World-News/Solar-Hits-Millionth-Installation-In-The-US-Faster-Growth-Ahead.html'), (u'May 11, 2016 at 14:14', 'http://oilprice.com/Latest-Energy-News/World-News/OPEC-Production-Up-140000-Bpd-in-April.html'), (u'May 11, 2016 at 14:03', 'http://oilprice.com/Latest-Energy-News/World-News/Tullow-Ghana-Oil-Production-Down-by-More-Than-50.html'), (u'May 11, 2016 at 13:47', 'http://oilprice.com/Latest-Energy-News/World-News/Tesla-To-Complete-Model-3-Design-By-End-June.html'), (u'May 11, 2016 at 12:30', 'http://oilprice.com/Latest-Energy-News/World-News/Iraqi-Kurds-Boost-Oil-Exports-to-Turkey.html'), (u'May 11, 2016 at 11:57', 'http://oilprice.com/Latest-Energy-News/World-News/Security-Services-Raid-Headquarters-of-Ukraines-Largest-Gas-Company.html'), (u'May 11, 2016 at 10:59', 'http://oilprice.com/Latest-Energy-News/World-News/Oil-Up-3-AS-EIA-Reports-34M-Barrel-Crude-Inventory-Drop.html')]
It is always better to associate values from the parent tag if possible, pulling all anchors and slicing is not a very robust approach.
select
and select_one
use css-selectors, the equivalent code using find and find_all would be:
import requests
from bs4 import BeautifulSoup
soup = BeautifulSoup(requests.get("http://oilprice.com/Latest-Energy-News/World-News").content)
main_div = soup.find("div", class_="tableGrid__column tableGrid__column--articleContent category")
divs = main_div.find_all("div","categoryArticle__content")
print([(d.find("p", {"class": "categoryArticle__meta"}).text.split("|")[0].strip(), d.a["href"]) for d in divs])
class_=..
lets you search-by-css-class
Also in this case categoryArticle__content
only appears in the main div so you could search initially for those divs in place of first selecting the main div.
soup = BeautifulSoup(requests.get("http://oilprice.com/Latest-Energy-News/World-News").content)
divs = soup.find_all("div","categoryArticle__content")
print([(d.find("p", {"class": "categoryArticle__meta"}).text.split("|")[0].strip(), d.a["href"]) for d in divs])