Un acercamiento al proceso de extracción y manipulación de datos con scrapy.
10789 단어 spanishpythonbeginnersdatascience
비전 일반
En este blog hare web scraping con un solo script utilizando scrapy y crawlerprocess, generando así un csv. Limpiaré los datos obtenidos y crearé una gráfica simple con ellos.
하시엔도 엘 웹 스크래핑
Iniciamos la spider, vamos a escraperar el sitio books.toscrape.com
class BooksSpider(scrapy.Spider):
name = "books_spider"
def start_requests(self):
yield scrapy.Request(url="http://books.toscrape.com/",callback=self.parse)
Parseamos los datos de la página con xpath
def parse(self, response):
t = response.xpath('//article[@class="product_pod"]/h3/a/text()').extract()
p = response.xpath('//article[@class = "product_pod"]/div[@class="product_price"]/p[@class="price_color"]/text()').extract()
a = response.xpath('//article[@class = "product_pod"]/div[@class="product_price"]/p[contains(@class,"instock")]/text()').extract()
a continuación una forma correcta de generar un csv, con un for recorrer las listas creadas en el paso anterior y hare una prelimpieza de estos datos con .strip() que eliminara los espacios restantes.
for i in range(len(t)):
yield {'title': t[i].strip(),'price': p[i].strip(),'availability': a[i].strip()}
제네라모스 엘 csv
indicamos que el archivo de salida tendra el formato csv y se llamara books.csv
process = CrawlerProcess(settings={
'FEED_FORMAT': 'csv',
'FEED_URI': 'books.csv',
'DOWNLOADER_MIDDLEWARES': {#esta configuracion es para user agents
'scrapy.downloadermiddlewares.useragent.UserAgentMiddleware': None,
'scrapy_user_agents.middlewares.RandomUserAgentMiddleware': 400,
},
})
process.crawl(BooksSpider)
process.start()
utilizando el jupyter 노트북
importamos las librerias que utilizaremos que son: pandas y numpy
import numpy as np
import pandas as pd
leemos el csv y vemos los primeros 5 elementos con el metodo .head()
df = pd.read_csv("books.csv")
df.head()
veemos que algunas filas no tiene todos sus datos asi que inspeccionamos el csv con .isna que nos devuelve true si faltan datos y tambien ponemos .any() para ver si faltan datos en cada columna
df.isna().any()
단독 faltan datos en availability que indica si hay o 재고 없음, vamos a llenar los datos faltantes poniendo que no hay 재고 없음
df.fillna("Not in stock")
그라피칸도
importamos el submodulo pyplot
import matplotlib.pyplot as plt
Ahora queremos graficar el precio y la disponibilidad pero la columna "availability"es de tipo string asi que la mapearemos a valores numéricos indicando que si hay stock vale 1 y si no 0
df["cantidad_disponible"] = df["availability"].map({"In stock": 1,"Not in stock":0,np.nan:0})
Generamos la grafica indicando que el precio estará en la abscisa x y la cantidad disponible en la abscisa, donde haya datos lo marcaremos con circulo "o", indicamos que la grafica sera de color azul con color = "b"y el estilo de la linea 세라 다쉬아도
fig, ax = plt.subplots()
ax.plot(df["price"],df["cantidad_disponible"],color="b",marker="o",linestyle="--")
Ahora agregaremos labels y un título al gráfico
ax.set_xlabel("precio (en euros)")
ax.set_ylabel("disponibilidad")
ax.set_title("precio de libros")
plt.xticks(rotation=90)
plt.show()
si quieren pueden ver mi deepnote con el codigo de pandas y matplotlib Aqui el código
Reference
이 문제에 관하여(Un acercamiento al proceso de extracción y manipulación de datos con scrapy.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/karencofre/un-acercamiento-al-proceso-de-extraccion-de-datos-con-scrapy-3i7b텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)