Python et SEO, Baidu Search Keyword Competition Degree Exploration asynchrone du robot démo

Comment vérifier le degré de concurrence des mots-clés, que les premiers contacts doivent savoir, accédez directement au navigateur pour rechercher des mots-clés, tels que Baidu rechercher un certain mot-clé, Weibo, une ligne de petits titres gris, "Baidu a trouvé environ 100 000 000 résultats pertinents pour vous "C'est le degré de concurrence pour les mots-clés. Il est lié à la difficulté de l'optimisation du classement des mots-clés à un stade ultérieur. Bien sûr, ce n'est qu'un indicateur de référence.

Bien sûr, il existe un index de référence très important, le mot-clé Baidu Index, qui concerne les mots-clés qui ont été inclus. La plupart d'entre eux devraient être optimisés en étudiant les mots-clés de l'Index Baidu. Les gros mots ont des index!

point clé

asyncio --- E / S asynchrones

À partir de Python 3.4, le concept de coroutines a été ajouté à Python, mais cette version de coroutines est toujours basée sur des objets générateurs. En Python 3.5, async / await a été ajouté pour rendre l'implémentation des coroutines plus pratique.

La bibliothèque la plus couramment utilisée pour utiliser les coroutines en Python est asyncio

asyncio est une bibliothèque pour écrire du code simultané, en utilisant la syntaxe async / await.

asyncio est utilisé comme base pour un certain nombre de frameworks asynchrones Python hautes performances, y compris les services réseau et de site Web, les bibliothèques de connexion de base de données, les files d'attente de tâches distribuées, etc.

asyncio est souvent le meilleur choix pour créer un code de réseau structuré de haut niveau et intensif en E / S.

event_loop: boucle d'événement, ce qui équivaut à une boucle infinie. Nous pouvons enregistrer certaines fonctions sur cette boucle d'événement. Lorsque les conditions sont remplies, la méthode de traitement correspondante sera appelée.

coroutine: la traduction chinoise est appelée coroutine, qui est souvent appelée le type d'objet coroutine en Python. Nous pouvons enregistrer l'objet coroutine dans la boucle temporelle, et il sera appelé par la boucle d'événements. Nous pouvons utiliser le mot-clé async pour définir une méthode, cette méthode ne sera pas exécutée immédiatement lorsqu'elle sera appelée, mais retournera un objet coroutine.

tâche: tâche, qui est une encapsulation supplémentaire de l'objet coroutine, y compris les différents états de la tâche.

Future: Représente le résultat d'une tâche qui sera exécutée ou non exécutée dans le futur. En fait, il n'a pas de différence essentielle avec la tâche.

Le mot clé async / await, qui n'est apparu que depuis Python 3.5, est spécifiquement utilisé pour définir les coroutines. Parmi eux, async définit une coroutine, et await est utilisé pour suspendre l'exécution de la méthode de blocage.

La concurrence d'Asyncio se rassemble et attend

rassembler est plus avancé qu'attendre.

Rassembler peut regrouper les tâches et se rassembler est généralement préférable.

Lorsque certaines tâches personnalisées le nécessitent, l'attente est utilisée.

Fil unique

#百度搜索结果数(竞争度大小)抓取
# 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))  # 程序耗时

Pour la démo complète, veuillez faire attention au compte officiel du laitier: Er Ye Ji

Mots-clés de réponse en arrière-plan: robot d'exploration asynchrone 

Obtenir le fichier py

Source de référence

  • [1] asyncio --- E / S asynchrones - Documentation Python 3.9.0

  • [2] robot d'exploration asynchrone asyncio + aiohttp

  • [3] L'étude du robot d'exploration Python note le principe et l'analyse du robot asynchrone asyncio + aiohttp

  • [4] De 0 à 1, l'évolution de la programmation asynchrone Python

  • [5] La concurrence d'Asyncio se rassemble et attend

Je suppose que tu aimes

Origine blog.csdn.net/minge89/article/details/109685500
conseillé
Classement