Я бы хотел скачать бесплатно загружаемые PDF-файлы (копии старой газеты с 1843 по 1900 год под названием Gaceta) со этого веб-сайта Никарагуанского национального собрания с Python3
/ Scrapy
.
Я абсолютный новичок в программировании и Python, но попытался начать с (n незаконченного) сценария:
#!/usr/bin/env python3
from urllib.parse import urlparse
import scrapy
from scrapy.http import Request
class gaceta(scrapy.Spider):
name = "gaceta"
allowed_domains = ["digesto.asamblea.gob.ni"]
start_urls = ["http://digesto.asamblea.gob.ni/consultas/coleccion/"]
def parse(self, response):
for href in response.css('div#gridTableDocCollection::attr(href)').extract():
yield Request(
url=response.urljoin(href),
callback=self.parse_article
)
def parse_article(self, response):
for href in response.css('div.download_wrapper a[href$=".pdf"]::attr(href)').extract():
yield Request(
url=response.urljoin(href),
callback=self.save_pdf
)
Ссылка на каждый выпуск содержит в себе некоторую тарабарщину, поэтому их нельзя предвидеть, и каждую ссылку необходимо искать в исходном коде, см., Например, ссылки на первые четыре доступных номера указанной газеты (не каждый день). была выпущена копия):
#06/07/1843
http://digesto.asamblea.gob.ni/consultas/util/pdf.php?type=rdd&rdd=nYgT5Rcvs2I%3D
#13/07/1843
http://digesto.asamblea.gob.ni/consultas/util/pdf.php?type=rdd&rdd=3sAxsKCA6Bo%3D
#28/07/1843
http://digesto.asamblea.gob.ni/consultas/util/pdf.php?type=rdd&rdd=137YSPeIXg8%3D
#08/08/1843
http://digesto.asamblea.gob.ni/consultas/util/pdf.php?type=rdd&rdd=aTvB%2BZpqoMw%3D
Моя проблема в том, что я не могу собрать рабочий скрипт вместе.
Я бы хотел, чтобы мой сценарий:
a) поиск по каждой PDF-ссылке в таблице, которая появляется после поиска (вызывается в исходном коде веб-сайта «tableDocCollection»). Фактическая ссылка находится за кнопкой «Acciones» (путь к первому выпуску //*[@id="tableDocCollection"]/tbody/tr[1]/td[5]/div/ul/li[1]/a
)
b) для отображения названия проблемы, которую он загружает и которую можно найти за кнопкой «Acciones» (путь к имени, отображаемому для первой проблемы //*[@id="tableDocCollection"]/tbody/tr[1]/td[5]/div/ul/li[2]/a
).
Основные проблемы, с которыми я сталкиваюсь при написании сценария:
1) что ссылка на сайт не меняется при вводе в поиске. Поэтому мне кажется, что я должен сказать Scrapy
, чтобы вставить соответствующие поисковые термины (галочка "Búsqueda avanzada", "Colección: Dario Oficial", "Medio de Publicación: La Gaceta", интервал времени "07.07.1843) 31/12/1900" )
2) что я не знаю, как найти каждую PDF-ссылку?
Как мне обновить вышеприведенный скрипт, чтобы я мог загрузить все PDF в диапазоне от 06/07/1843 до 31/12/1900?
Edit:
#!/usr/bin/env python3
from urllib.parse import urlparse
import scrapy
from scrapy.http import Request
frmdata = {"rdds":[{"rddid":"+1RiQw3IehE=","anio":"","fecPublica":"","numPublica":"","titulo":"","paginicia":null,"norma":null,"totalRegistros":"10"}
url = "http://digesto.asamblea.gob.ni/consultas/coleccion/"
r = FormRequest(url, formdata=frmdata)
fetch(r)
yield FormRequest(url, callback=self.parse, formdata=frmdata)