Я хотел бы просканировать страницу, указанную ниже, и извлечь 2 ссылки для скачивания, которые она предоставляет. Я не могу использовать имена тегов, так как они всегда будут меняться. Также бывают случаи, когда есть только 1 ссылка. Код ошибки, потому что он говорит, что нет атрибута "a". Есть, но не знаю, как пройти 3 узла вниз.
<div class="snippet" data-lang="js" data-hide="false" data-console="true" data-babel="false">
<div class="snippet-code">
<pre class="snippet-code-html lang-html prettyprint-override"><code> <ul class="field__items">
<li class="field__item">
<div class="media media--type-zip media--view-mode-file-list">
<a href="/files/zip/pdp-enrollment-statecountycontract-january-2020-full-version.zip">PDP Enrollment by State/County/Contract – January 2020 - Full version (ZIP)</a>
</div>
</li>
<li class="field__item">
<div class="media media--type-zip media--view-mode-file-list">
<a href="/files/zip/pdp-enrollment-statecountycontract-january-2020-abridged-version-exclude-rows-10-or-less-enrollees.zip">PDP Enrollment by State/County/Contract – January 2020 - Abridged version to exclude rows with 10 or less enrollees (ZIP)</a>
</div>
</li>
</ul>
Код
import pandas as pd
from bs4 import BeautifulSoup
from datetime import datetime
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={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36',"content-type":"text"})
else:
content = requests.get(url, params=payload, verify=False, headers={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36',"content-type":"text"})
content.raise_for_status() # Raise HTTPError for bad requests (4xx or 5xx)
if parse:
return BeautifulSoup(content.text, 'html.parser'), 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-systemsstatistics-trends-and-reportsmcradvpartdenroldatamonthly-pdp/pdp-enrollment-scc-2020-01'
df = pd.DataFrame()
content, _ = http_request_get(url=cmslink,payload={'t':''},parse=True)
table = content.find("div", class_="field__items").a['href']