Pythonとseo、Baidu検索キーワード競合度クロール非同期クローラーデモ

キーワードの競合の程度を確認する方法、最初の連絡先は知っておく必要があります。ブラウザに直接アクセスして、特定のキーワードのBaidu検索、Weibo、小さな灰色の見出しの行などのキーワードを検索します。 「これはキーワードの競争の度合いです。これは、後の段階でのキーワードランキングの最適化の難しさに関係しています。もちろん、これは参照指標にすぎません。

もちろん、非常に重要な参照インデックスであるキーワードBaidu Indexがあります。これは、含まれているキーワード用です。それらのほとんどは、Baidu Indexのキーワードを調べて最適化する必要があります。大きな単語にはインデックスがあります!

キーポイント

asyncio ---非同期I / O

Python 3.4以降、コルーチンの概念がPythonに追加されましたが、このバージョンのコルーチンは引き続きジェネレータオブジェクトに基づいています。Python3.5では、コルーチンの実装をより便利にするためにasync / awaitが追加されました。

Pythonでcoroutineを使用するために最も一般的に使用されるライブラリはasyncioです

asyncioは、async / await構文を使用して同時コードを記述するためのライブラリです。

asyncioは、ネットワークおよびWebサイトのサービス、データベース接続ライブラリ、分散タスクキューなど、多数の高性能Python非同期フレームワークの基盤として使用されます。

多くの場合、asyncioは、IOを集中的に使用する高レベルの構造化ネットワークコードを構築するための最良の選択です。

event_loop:無限ループに相当するイベントループ。このイベントループにいくつかの関数を登録でき、条件が満たされると、対応する処理メソッドが呼び出されます。

coroutine:中国語の翻訳はcoroutineと呼ばれ、Pythonではcoroutineオブジェクトタイプと呼ばれることがよくあります。coroutineオブジェクトをタイムループに登録すると、イベントループによって呼び出されます。asyncキーワードを使用してメソッドを定義できます。このメソッドは、呼び出されてもすぐには実行されませんが、通常のオブジェクトを返します。

task:task。これは、タスクのさまざまな状態を含む、coroutineオブジェクトのさらなるカプセル化です。

将来:将来実行されるタスクまたは実行されないタスクの結果を表します。実際、タスクと本質的な違いはありません。

async / awaitキーワードは、Python 3.5以降にのみ登場し、特にコルルーチンを定義するために使用されます。その中で、asyncはコルーチンを定義し、awaitはブロッキングメソッドの実行を一時停止するために使用されます。

asyncioの同時実行性が集まり、待機します

収集は待機よりも進んでいます。

収集はタスクをグループ化でき、一般的に収集が推奨されます。

一部のカスタマイズされたタスクが必要な場合は、待機が使用されます。

シングルスレッド

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

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异しかし-収集

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

完全なデモについては、スラグの公式アカウントに注意してください:Er Ye Ji

バックグラウンド応答キーワード:非同期クローラー 

pyファイルを取得する

参照元

  • [1] asyncio ---非同期I / O — Python3.9.0ドキュメント

  • [2] asyncio + aiohttp非同期クローラー

  • [3] Pythonクローラーの調査ノートasyncio + aiohttp非同期クローラーの原理と分析

  • [4] 0から1まで、Python非同期プログラミングの進化

  • [5]非同期収集と待機の同時実行

おすすめ

転載: blog.csdn.net/minge89/article/details/109685500