Python y seo, Baidu, competencia de palabras clave de búsqueda, rastreo, demostración del rastreador asíncrono

Cómo verificar el grado de competencia de palabras clave, el primer contacto que la gente debe saber, ir directamente al navegador para buscar palabras clave, como Baidu busca una determinada palabra clave, Weibo, una línea de pequeños titulares grises, "Baidu encontró alrededor de 100,000,000 de resultados relevantes para usted. "Este es el grado de competencia por las palabras clave. Se relaciona con la dificultad de la optimización de la clasificación de las palabras clave en la etapa posterior. Por supuesto, este es solo un indicador de referencia.

Por supuesto, también hay un índice de referencia muy importante, la palabra clave Baidu Index, que es para las palabras clave que se han incluido. La mayoría de ellas deben optimizarse estudiando las palabras clave del Baidu Index. ¡Las palabras grandes tienen índices!

punto clave

asyncio --- E / S asincrónica

A partir de Python 3.4, se agregó el concepto de corrutinas a Python, pero esta versión de corrutinas todavía se basa en objetos generadores. En Python 3.5, se agregó async / await para hacer más conveniente la implementación de las corrutinas.

La biblioteca más utilizada para usar corrutinas en Python es asyncio

asyncio es una biblioteca para escribir código concurrente, usando sintaxis async / await.

asyncio se utiliza como base para una serie de marcos asincrónicos de Python de alto rendimiento, incluidos servicios de red y sitios web, bibliotecas de conexión de bases de datos, colas de tareas distribuidas, etc.

asyncio es a menudo la mejor opción para crear código de red estructurado de alto nivel y con uso intensivo de E / S.

event_loop: bucle de eventos, que equivale a un bucle infinito, podemos registrar algunas funciones en este bucle de eventos, cuando se cumplan las condiciones se llamará al método de procesamiento correspondiente.

coroutine: la traducción al chino se llama coroutine. En Python, a menudo se denomina tipo de objeto de coroutine. Podemos registrar el objeto de coroutine en el bucle de tiempo y será llamado por el bucle de eventos. Podemos usar la palabra clave async para definir un método, este método no se ejecutará inmediatamente cuando se llame, pero devuelve un objeto de rutina.

tarea: Tarea, que es una encapsulación adicional del objeto de rutina, incluidos los diversos estados de la tarea.

Futuro: Representa el resultado de una tarea que se ejecutará o no se ejecutará en el futuro, de hecho, no tiene diferencia esencial con la tarea.

La palabra clave async / await, que solo apareció desde Python 3.5, se usa específicamente para definir corrutinas. Entre ellos, async define una corrutina y await se usa para suspender la ejecución del método de bloqueo.

Concurrencia de asyncio reunirse y esperar

recopilar es más avanzado que esperar.

Recopilar puede agrupar tareas, y generalmente se prefiere recopilar.

Cuando algunas tareas personalizadas lo requieren, se utiliza la espera.

Hilo único

#百度搜索结果数(竞争度大小)抓取
# 20201113@author:WX:huguo00289
# -*- coding=utf-8 -*-

import requests,re,time
from fake_useragent import UserAgent

def search(keyword):
    sum=''
    ua=UserAgent()
    url=f'https://www.baidu.com/s?wd={keyword}&ie=UTF-8'
    headers= {
        'User-Agent':ua.random,
        'Cookie':'BIDUPSID=E8605F17778754AD6BAA328A17329DAF; PSTM=1595994013; BAIDUID=E8605F17778754AD8EAC311EDCEC5A37:FG=1; BD_UPN=12314353; BDORZ=B490B5EBF6F3CD402E515D22BCDA1598; COOKIE_SESSION=75158_0_8_0_82_8_0_0_0_8_1_0_75159_0_1_0_1605083022_0_1605083023%7C9%230_0_1605083023%7C1; H_PS_645EC=c097mGOFZEl3IZjKw2lVOhIl4YyhcIr2Zp3YMimT2D62xwJo8q%2B9jeQnZq3gvUXMGbhD; BA_HECTOR=a42l8ka5ah8h0003611fqs8b60p; BD_HOME=1; H_PS_PSSID=32818_1452_33045_32939_33060_32973_32705_32961',
    }
    try:
        html=requests.get(url,headers=headers,timeout=5).content.decode('utf-8')
        #time.sleep(1)
        sum=re.search(r'<span class="nums_text">百度为您找到相关结果约(.+?)个</span>',html,re.M|re.I).group(1)
    except Exception as e:
        print(f"错误代码: {e}")
    if sum !='':
        print(keyword,sum)


def main():
    keywords=["seo优化技巧","百度站长平台","sem怎么学习","全网推广营销","seo网站优化方案","百度烧钱推广","自媒体推广策划"]
    for keyword in keywords:
        search(keyword)

    print('共运行了{}秒'.format(end - start))  # 程序耗时

asyncio + aiohttp 异步 -wait

async def get_content(keyword):
    ua = UserAgent()
    headers = {
        'User-Agent': ua.random,
        'Cookie': 'BIDUPSID=E8605F17778754AD6BAA328A17329DAF; PSTM=1595994013; BAIDUID=E8605F17778754AD8EAC311EDCEC5A37:FG=1; BD_UPN=12314353; BDORZ=B490B5EBF6F3CD402E515D22BCDA1598; COOKIE_SESSION=75158_0_8_0_82_8_0_0_0_8_1_0_75159_0_1_0_1605083022_0_1605083023%7C9%230_0_1605083023%7C1; H_PS_645EC=c097mGOFZEl3IZjKw2lVOhIl4YyhcIr2Zp3YMimT2D62xwJo8q%2B9jeQnZq3gvUXMGbhD; BA_HECTOR=a42l8ka5ah8h0003611fqs8b60p; BD_HOME=1; H_PS_PSSID=32818_1452_33045_32939_33060_32973_32705_32961',
    }
    async with aiohttp.ClientSession() as session:
        response = await session.get(f'https://www.baidu.com/s?wd={keyword}&ie=UTF-8',headers=headers,timeout=5)
        content = await response.read()
        return content




async def get_num(keyword):
    sum=''
    content = await get_content(keyword)
    try:
        html=content.decode('utf-8')
        #time.sleep(1)
        sum=re.search(r'<span class="nums_text">百度为您找到相关结果约(.+?)个</span>',html,re.M|re.I).group(1)
    except Exception as e:
        print(f"错误代码: {e}")
    if sum !='':
        print(keyword,sum)



def run():
    tasks = []
    start = time.time()  # 记录起始时间戳
    keywords=["seo优化技巧","百度站长平台","sem怎么学习","全网推广营销","seo网站优化方案","百度烧钱推广","自媒体推广策划"]
    loop = asyncio.get_event_loop()
    for keyword in keywords:
        c = get_num(keyword)
        # 通过返回的协程对象进一步封装成一个任务对象
        task = asyncio.ensure_future(c)
        tasks.append(task)
    loop.run_until_complete(asyncio.wait(tasks))
    end = time.time()  # 获取结束时间戳
    print('共运行了{}秒'.format(end - start))  # 程序耗时

asyncio + aiohttp 异步 -gather

def run_gather():
    start = time.time()  # 记录起始时间戳
    keywords=["seo优化技巧","百度站长平台","sem怎么学习","全网推广营销","seo网站优化方案","百度烧钱推广","自媒体推广策划"]
    tasks = [asyncio.ensure_future(get_num(keyword)) for keyword in keywords]
    loop = asyncio.get_event_loop()
    tasks = asyncio.gather(*tasks)
    loop.run_until_complete(tasks)
    end = time.time()  # 获取结束时间戳
    print('共运行了{}秒'.format(end - start))  # 程序耗时

Para la demostración completa, preste atención a la cuenta oficial de la escoria: Er Ye Ji

Palabras clave de respuesta en segundo plano: rastreador asincrónico 

Obtener el archivo py

Fuente de referencia

  • [1] asyncio --- E / S asincrónica - documentación de Python 3.9.0

  • [2] asyncio + aiohttp rastreador asíncrono

  • [3] Notas del estudio del rastreador de Python asyncio + aiohttp principio y análisis del rastreador asíncrono

  • [4] De 0 a 1, la evolución de la programación asincrónica de Python

  • [5] Concurrencia de asyncio reunir y esperar

Supongo que te gusta

Origin blog.csdn.net/minge89/article/details/109685500
Recomendado
Clasificación