import time
import pandas as pd
import requests as r
from scrapy.spiders import Spider
from scrapy.item import Item, Field
from scrapy.loader import ItemLoader
from scrapy.selector import Selector
from scrapy.crawler import CrawlerProcess
import scrapy
'''class Aseguradoips(Item):
documento = Field()
#nombres = Field()'''
class IPS(scrapy.Spider):
name = 'IPSBuscar'
custom_settings = {
'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'
}
def parse(id_number):
"""
Toma un numero de cedula y extrae toda la informacion accesible desde
consulta al asegurado del portal de IPS
"""
url = 'mi_url'
headers = {
'Connection': 'keep-alive',
'Cache-Control': 'max-age=0',
'sec-ch-ua': '"Chromium";v="88", "Google Chrome";v="88", ";Not A Brand";v="99"',
'sec-ch-ua-mobile': '?0',
'Upgrade-Insecure-Requests': '1',
'Origin': '
mi_url',
'Content-Type': 'application/x-www-form-urlencoded',
'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',
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
'Sec-Fetch-Site': 'same-origin',
'Sec-Fetch-Mode': 'navigate',
'Sec-Fetch-User': '?1',
'Sec-Fetch-Dest': 'document',
'Referer': '
mi_url',
'Accept-Language': 'en-US,en;q=0.9,es;q=0.8'
}
data = {
'nro_cic': '{}'.format(id_number),
'recuperar': 'Recuperar',
'elegir': '',
'envio': 'ok'
}
html_text =
r.post(url=url, headers=headers, data=data).text
sel = Selector(text=html_text)
ips = sel.xpath('.//form[@name="vesbrbacnorc"]').extract()
#print(ips)
#for asegurado in ips:
item = ItemLoader(ips)
documento = item.xpath('//table[2]//tr[2]/td[2]').text()
# nombres = asegurado.xpath('//form[@name="vesbrbacnorc"]/table[2]//tr[2]/td[3]/text()').get()
#item.add_xpath('documento', './/form[@name="vesbrbacnorc"]/table[2]//tr[2]/td[2]/text()')
#yield item.load_item()
yield item.load_item()
if __name__ == '__main__':
id_list = [123, 456, 789, 1011, 1213, 1415]
for id_number in id_list:
parse(id_number)
time.sleep(1)
Colegas, tengo un problema con mi scraping. Debo enviar el id_number a mi url, la url tiene una caja donde ingresar el id_number y debe devolver un formulario y de ese formulario tengo que extraer los datos, ya he probado de todo. Ya saqué una versión con Selenium pero mi jefe me pide que lo haga con Scrapy y no logro resolver el problema. hasta el Selector esta ok me trae el form y los datos pero al instanciar el ItemLoader ya me trae vacio. Si alguien puede ayudarme por favor!!!