Co masz na myśli pisząc "strategiczne miejsca"? Może głupie pytanie, ale to moje pierwsze kroki.
Wypisujesz zawartość głównych zmiennych, czy ich zawartość odpowiada oczekiwaniom. Na przykład wypiszmy sobie url-e, do których uderzamy:
next_page = 'infostrefa/pl/wiadomosci/espi/1'
while True:
r = requests.get('http://infostrefa.com/infostrefa/pl/wiadomosci/szukaj/1?dateFrom=2015-01-01&dateTo=2018-12-31&company=77&source=espi&category=wszystko,tematy-dnia,o-rynku,analizy,pap-o-spolkach,rekomendacje,raporty-dm,gpw-knf,rynki-zagraniczne' + next_page)
print(r.url)
# ...
Zobaczymy, że kod próbuje wbijać na taki url:
http://infostrefa.com/infostrefa/pl/wiadomosci/szukaj/1?dateFrom=2015-01-01&dateTo=2018-12-31&company=77&source=espi&category=wszystko,tematy-dnia,o-rynku,analizy,pap-o-spolkach,rekomendacje,raporty-dm,gpw-knf,rynki-zagraniczne/infostrefa/pl/wiadomosci/szukaj/2?company=77&dateFrom=2015-01-01&dateTo=2018-12-31&source=espi&category=wszystko,tematy-dnia,o-rynku,analizy,pap-o-spolkach,rekomendacje,raporty-dm,gpw-knf,rynki-zagraniczneinfostrefa/pl/wiadomosci/espi/1
Wklejamy w przeglądarkę i widać, że jest niepoprawny. Poprawny otrzymujemy po kliknięciu na przycisk "dalej" i wygląda tak:
http://infostrefa.com/infostrefa/pl/wiadomosci/szukaj/2?company=77&dateFrom=2015-01-01&dateTo=2018-12-31&source=espi&category=wszystko,tematy-dnia,o-rynku,analizy,pap-o-spolkach,rekomendacje,raporty-dm,gpw-knf,rynki-zagraniczneinfostrefa/pl/wiadomosci/espi/1
Z tego wniosek, że nasze konstruowanie url-i jest do bani. Zamiast chamskiego dodawania zatem warto by użyć innych metod, jak chociażby zalinkowanego już wcześniej urljoin czy biblioteki furl. Z grubsza wychodzi coś takiego (nie sprawdzone)
import urlparse
import requests
import bs4
page_to_scrape = 'http://infostrefa.com/infostrefa/pl/wiadomosci/szukaj/1?company=77&dateFrom=2015-01-01&dateTo=2018-12-31&source=espi&category=wszystko,tematy-dnia,o-rynku,analizy,pap-o-spolkach,rekomendacje,raporty-dm,gpw-knf,rynki-zagraniczneinfostrefa/pl/wiadomosci/espi/1'
while True:
r = requests.get(page_to_scrape)
soup = bs4.BeautifulSoup(r.text)
table = soup.find("table", class_="table-data")
current_date, current_time, current_text = None, None, None
for tr in table.find_all("tr"):
divider = tr.find('td', class_='divider')
if divider:
current_date = divider.text
continue
time = tr.find('td', class_='time')
if time:
current_time = time.text
text = tr.find('td', class_='text')
if text:
current_text = text.text
print(u"{}\n{}\n{}\n\n".format(current_date, current_time, current_text))
next = soup.find('a', class_='nav-next')
if next:
next_page = urlparse.urljoin(page_to_scrape, next['href'])
else:
break