Web Scraping con scrapy y regex
비전 일반
En este post mostrare una manera de usar regex en un proyecto de scrapy coon CrawlerProcess, tomando como ejemplo el sitio web pagina12.com.ar
요구 사항
las librerias utilizadas en este proyecto son las siguientes
Scrapy==2.6.1
scrappy-user-agents=0.1.1
Primero crearemos el código 베이스 드 라 스파이더
como solo tenemos un url se la pasamos directamente a scrapy.Request como string y el callback lo dirigimos a nuestro segundo metodo parse_frontpage donde parseamos la pagina
por ahora en el metodo parse_frontpage que recibe una response solo creamos una lista vacia y con el cual generaremos un json con los valores de esa lista
#importamos los modulos necesarios
import scrapy
from scrapy.crawler import CrawlerProcess
#creamos la clase de nuestra spider
class PaginaDoceSpider(scrapy.Spider):
name = 'pagina_doce'
def start_requests(self):
yield scrapy.Request(url="https://pagina12.com.ar",callback=self.parse_front_page)
def parse_frontpage(self, response):
links = []#aqui almacenaremos los selectores que agregaremos al json
yield{'links': links} #generamos el json
일반 Lista de Selectores
con xpath hago scraping del sitio web y con la función extract() extraigo una lista de selectores para almacenarlos en la variable hrefs
hrefs = response.xpath('//a[@class="p12-dropdown-item"]/@href').extract()
for link in hrefs:
print(link)
imprimo los 링크 del hrefs para ver que tengo mas anchors de los que queria y bueno como yo se la url de los 링크 que necesito puedo crear una expresión regular para filtrar los hrefs.
활용 정규식
Creamos una expresión regular, para utilizar en nuestra araña, a la funcion compile le pasamos una string con el regex anteponiendole una 'r', para indicar que es de forma recursiva.
Dado que el url en el que necesitamos hacer match es https://www.pagina12.com.ar/secciones nos quedaría la expresion regular r'https:\/\/w{3}.[a-r1-2.\/]+secciones'
generamos el patron y lo agregamos como 변수 de clase a nuestra clase PaginaDoceSpider
p = re.compile(r'https:\/\/w{3}\.[a-r1-2\.\/]+secciones')
links = []
for link in hrefs: # Parsear cada seccion
if self.p.match(link):
links.append(link)
filtramos los 링크 con un if y el 후원자 'p', luego los agregamos a la lista 링크
누에스트라 클라세 결승전
class PaginaDoceSpider(scrapy.Spider):
name = 'pagina_doce' # Nombre del spider
p = re.compile(r'https:\/\/w{3}\.[a-r1-2\.\/]+secciones')
def start_requests(self):
yield scrapy.Request(url=get_proxy_url("https://pagina12.com.ar"), callback=self.parse_frontpage)
def parse_frontpage(self, response):
links = []
hrefs = response.xpath('//a[@class="p12-dropdown-item"]/@href').extract()
for link in hrefs: # Parsear cada seccion
if self.p.match(link):
links.append(link)
yield{'links': links}
Agregando settings especificos para la Spider
instanciamos un objeto 프로세스
process = CrawlerProcess(settings={
'FEED_URI': 'pagina_doce.json',
'FEED_FORMAT': 'json',
'DOWNLOADER_MIDDLEWARES': {
'scrapy.downloadermiddlewares.useragent.UserAgentMiddleware': None,
'scrapy_user_agents.middlewares.RandomUserAgentMiddleware': 400,
}
})
con FEED_URI especificamos ej archivo output que tendra nuestra araña, con FEED_FORMAT el tipo del archivo y DOWNLOADER_MIDDLEWARES es la configuración que tenemos que poner para nuestros 사용자 에이전트 de la libreria scrapy-user-agents
이니시아모스 엘 스크래핑
Tenemos que pasarle el nombre de nuestra clase Spider a la funcion crawl
process.crawl(PaginaDoceSpider)
process.start()
Reference
이 문제에 관하여(Web Scraping con scrapy y regex), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/karencofre/web-scraping-con-scrapy-y-regex-2kag텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)