Python und SEO, Baidu Search Keyword Wettbewerb Grad Crawlen asynchrone Crawler Demo

Wie man den Grad der Keyword-Konkurrenz überprüft, sollten die ersten Kontaktpersonen wissen, direkt zum Browser gehen, um nach Keywords zu suchen, wie zum Beispiel die Baidu-Suche nach einem bestimmten Keyword, Weibo, eine Reihe kleiner grauer Überschriften. "Baidu fand ungefähr 100.000.000 relevante Ergebnisse für Sie "Dies ist der Grad des Wettbewerbs um Keywords. Er bezieht sich auf die Schwierigkeit Ihrer Optimierung des Keyword-Rankings in der späteren Phase. Dies ist natürlich nur ein Referenzindikator.

Natürlich gibt es einen sehr wichtigen Referenzindex, das Schlüsselwort Baidu Index, der für die enthaltenen Schlüsselwörter gilt. Die meisten von ihnen sollten durch Studium der Schlüsselwörter des Baidu-Index optimiert werden. Große Wörter haben Indizes!

Kernpunkt

asyncio --- Asynchrone E / A.

Ab Python 3.4 wurde Python das Konzept der Coroutinen hinzugefügt, diese Version der Coroutinen basiert jedoch weiterhin auf Generatorobjekten. In Python 3.5 wurde async / await hinzugefügt, um die Implementierung von Coroutinen komfortabler zu gestalten.

Die am häufigsten verwendete Bibliothek zur Verwendung von Coroutinen in Python ist Asyncio

asyncio ist eine Bibliothek zum Schreiben von gleichzeitigem Code unter Verwendung der Async / await-Syntax.

asyncio wird als Grundlage für eine Reihe von asynchronen Python-Hochleistungsframeworks verwendet, darunter Netzwerk- und Websitedienste, Datenbankverbindungsbibliotheken, verteilte Aufgabenwarteschlangen usw.

asyncio ist häufig die beste Wahl für die Erstellung von E / A-intensivem und strukturiertem Netzwerkcode auf hoher Ebene.

event_loop: Ereignisschleife, die einer Endlosschleife entspricht. Wir können einige Funktionen in dieser Ereignisschleife registrieren. Wenn die Bedingungen erfüllt sind, wird die entsprechende Verarbeitungsmethode aufgerufen.

Coroutine: Die chinesische Übersetzung wird als Coroutine bezeichnet. In Python wird sie häufig als Coroutine-Objekttyp bezeichnet. Wir können das Coroutine-Objekt in der Zeitschleife registrieren und es wird von der Ereignisschleife aufgerufen. Wir können das Schlüsselwort async verwenden, um eine Methode zu definieren. Diese Methode wird beim Aufruf nicht sofort ausgeführt, sondern gibt ein Coroutine-Objekt zurück.

Aufgabe: Aufgabe, bei der es sich um eine weitere Kapselung des Coroutine-Objekts handelt, einschließlich der verschiedenen Zustände der Aufgabe.

Zukunft: Stellt das Ergebnis einer Aufgabe dar, die in Zukunft ausgeführt oder nicht ausgeführt wird. Tatsächlich hat es keinen wesentlichen Unterschied zur Aufgabe.

Das Schlüsselwort async / await, das erst seit Python 3.5 vorkommt, wird speziell zum Definieren von Coroutinen verwendet. Unter diesen definiert Async eine Coroutine, und wait wird verwendet, um die Ausführung der Blockierungsmethode anzuhalten.

Parallelität von Asyncio sammeln und warten

sammeln ist weiter fortgeschritten als warten.

Sammeln kann Aufgaben gruppieren, und Sammeln wird im Allgemeinen bevorzugt.

Wenn einige benutzerdefinierte Aufgaben erforderlich sind, wird Warten verwendet.

Einzelfaden

#百度搜索结果数(竞争度大小)抓取
# 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 异步 -warten

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))  # 程序耗时

Für die vollständige Demo beachten Sie bitte den offiziellen Bericht der Schlacke: Er Ye Ji

Schlüsselwörter für Hintergrundantworten: Asynchroner Crawler 

Holen Sie sich py-Datei

Referenzquelle

  • [1] asyncio --- Asynchrone E / A - Python 3.9.0-Dokumentation

  • [2] asynchroner asynchroner Crawler asyncio + aiohttp

  • [3] Python-Crawler-Studie stellt asynchrones + aiohttp-Prinzip und -Analyse für asynchrones Crawler fest

  • [4] Von 0 bis 1 die Entwicklung der asynchronen Python-Programmierung

  • [5] Parallelität von Asyncio sammeln und warten

Ich denke du magst

Origin blog.csdn.net/minge89/article/details/109685500
Empfohlen
Rangfolge