В настоящее время я пытаюсь получить исторические данные CMS с этого сайта. У меня есть некоторый рабочий код, чтобы вытащить ссылки для скачивания со страницы. Моя проблема в том, что ссылки делятся на страницы. Мне нужно перебрать все доступные страницы и извлечь ссылки для скачивания. Очевидным выбором здесь является использование Selenium для перехода на следующие страницы и получения данных. Из-за политики компании я не могу запустить селен в окружающей среде. Есть ли способ, которым я могу пройти по страницам и извлечь ссылку. Веб-сайт не показывает ссылку на сообщение, когда вы пытаетесь go перейти к следующей странице. У меня нет идей, чтобы попытаться перейти на следующую страницу без ссылки на публикацию или без использования селена.
Текущий рабочий код для получения ссылок с первой страницы
import pandas as pd
from datetime import datetime
#from selenium import webdriver
from lxml import html
import requests
def http_request_get(url, session=None, payload=None, parse=True):
""" Sends a GET HTTP request to a website and returns its HTML content and full url address. """
if payload is None:
payload = {}
if session:
content = session.get(url, params=payload, verify=False, headers={"content-type":"text"})
else:
content = requests.get(url, params=payload, verify=False, headers={"content-type":"text"})
content.raise_for_status() # Raise HTTPError for bad requests (4xx or 5xx)
if parse:
return html.fromstring(content.text), content.url
else:
return content.text, content.url
def get_html(link):
"""
Returns a html.
"""
page_parsed, _ = http_request_get(url=link, payload={'t': ''}, parse=True)
return page_parsed
cmslink = "https://www.cms.gov/Research-Statistics-Data-and-Systems/Statistics-Trends-and-
Reports/MCRAdvPartDEnrolData/Monthly-Contract-and-Enrollment-Summary-Report"
content, _ = http_request_get(url=cmslink,payload={'t':''},parse=True)
linkTable = content.cssselect('td[headers="view-dlf-1-title-table-column"]')[0]
headers = linkTable[0].xpath('//a/@href')
df1 = pd.DataFrame(headers,columns= ['links'])
df1SubSet = df1[df1['links'].str.contains('contract-summary', case=False)]