Publique un artículo en la comunidad de Nuggets y agregue "Estoy participando en el "Plan de navegación de los Nuggets" en la primera oración del texto
escribir delante
Hoy es el 78.º blog de rastreadores de Python, configure una bandera aquí y esfuércese por terminar de escribir 100 casos de rastreadores antes del 1 de octubre. Si ve en el primer artículo, debe ser un codificador de rastreadores calificado, ¡siga adelante! !
Continúe obteniendo el rastreador incremental, este artículo involucra dos módulos de Python, uno es Scrapy y el otro es BloomFilter
Escenarios de uso de BloomFilter (filtro Bloom)
En cuanto a quién inventó BloomFilter y por qué, este artículo no entrará en detalles. A continuación, compartiremos principalmente con usted los escenarios en los que se utiliza BloomFilter.
- Aplicación de lista negra (lista negra de correo)
- Deduplicación del rastreador web (relacionado con el rastreador incremental que vamos a aprender)
- El sistema KV determina rápidamente si la clave existe
- Penetración de caché reducida
Una biblioteca que necesita ser dominada hoy es llamada pybloom_live
sobre su código fuente. Para la última versión, consulte pypi.org/project/pyb…
Primero, vaya a github para verificar la biblioteca de dependencias. Este lugar es muy importante. Si no presta atención al seguimiento, es fácil anular github.com/joseph-fox/… Verifique la biblioteca de dependencias y tu necesitas unbitarray
Como no lo instalé al principio, se produjo el siguiente error. Preste atención para recordarnos que VC++ 14 no existe, pero instalarlo requiere muchos recursos. Podemos hacerlo de otras maneras.
Abrir https://www.lfd.uci.edu/~gohlke/pythonlibs/#bitarray
Encuentra la versión correspondiente de Python instalada localmente en tu computadora. Estoy usando la versión 3.7, solo descárgala. Hemos explicado la instalación de este contenido en el blog anterior.
paso uno:
Paso 2:
Instalarpybloom_live
pybloom_live Inicio rápido
pybloom_live
Hay dos usos simples, BloomFilter de capacidad fija y ScalableBloomFilter escalable, para decirlo sin rodeos, es una expansión fija y dinámica.
El de arriba es el ladrillo que tiré (Baidu, todavía hay muchas instrucciones básicas)
A continuación, usamos la BloomFilter
clase para operar un archivo para lograr la deduplicación. Tenga en cuenta aquí que la deduplicación BloomFilter
se realiza leyendo y escribiendo archivos. Si escribe un rastreador multiproceso o multiproceso, debe agregar exclusión mutua y sincronización al usarlo. Las condiciones, así como BloomFilter
las operaciones de E/S de archivos, prestan atención a la escritura y lectura por lotes, de lo contrario, la eficiencia se verá muy afectada.
Declare un bloomcheck.py
archivo de clase, escriba el siguiente código, la descripción del código se ha colocado en los comentarios.
from pybloom_live import BloomFilter
import os
import hashlib
class BloomCheck(object):
def __init__(self):
'''
以下代码用于判断bf布隆文件是否存在,存在打开,不存在新建
'''
self.filename = 'bloomfilter.bf'
is_exist = os.path.exists(self.filename)
if is_exist:
self.bf = BloomFilter.fromfile(open(self.filename, 'rb'))
else:
# capacity是必选参数,表示容量 error_rate是错误率
self.bf = BloomFilter(capacity=100000000, error_rate=0.001)
def process_item(self, data):
data_encode_md5 = hashlib.md5(data.encode(encoding='utf-8')).hexdigest()
if data_encode_md5 in self.bf:
# 如果data存在,返回False
return False
else:
# 如果data不存在,新增到bf文件中,返回True
self.bf.add(data_encode_md5)
return True
def save_bloom_file(self):
self.bf.tofile(open(self.filename, 'wb'))
复制代码
código rastreador scrapy
Para la parte básica del rastreador, solo se muestra la parte del código fuente del rastreador central. Para response
el análisis, el juicio básico aún se realiza primero. Si title
ya existe bf文件
(el archivo se crea dinámicamente mediante el código anterior), entonces no se agregará , de lo contrario, los datos serán iterados.
El código completo se cargará en el archivo adjunto y se puede descargar al final del artículo.
class IndexSpider(scrapy.Spider):
name = 'index'
allowed_domains = ['xz.aliyun.com']
start_urls = ['http://xz.aliyun.com/']
bf = BloomCheck()
def parse(self, response):
li_list = response.xpath("//a[@class='topic-title']")
for li in li_list:
de_item = DeItem()
title = li.xpath("./text()").extract_first().strip()
# 判断title是否在bf文件中,如果不在,返回新数据
if self.bf.process_item(title):
de_item['title'] = title
de_item['url'] = "https://xz.aliyun.com" + li.xpath("./@href").extract_first()
yield de_item
else:
print(f"--{title}--数据已经存在,不进行添加")
# 保存数据
self.bf.save_bloom_file()
复制代码
Configurar tareas programadas scrapy
Escriba un archivo por lotes run.bat y colóquelo en el mismo directorio que el programa rastreador. También se pueden
cambiar otros directorios. Tenga en cuenta que la siguiente ruta se puede cambiar a su propia ruta.
@echo off
rem
E:
cd E:\crawl100\demo78\de\de
scrapy crawl index
rem pause
exit
复制代码
Personalizar el programa de tareas programadas de Windows Busque "Programador de tareas" en "Herramientas administrativas" en "Panel de control" y abra Crear tarea básica. Después de iniciar el programa, seleccione la ubicación del archivo bat. Programe las tareas para prestar atención a la hora de la prueba.
Este lugar encontrará un blog relativamente detallado para usted, el contenido es relativamente simple y no lo repetiré: blog.csdn.net/Gpwner/arti…
escribir en la parte de atrás
El rastreador incremental de hoy está aquí, espero que este artículo pueda ayudarlo ~