飞道的博客

python与seo,百度搜索关键词竞争度大小抓取异步爬虫demo

561人阅读  评论(0)

关键词竞争度如何查看,最开始接触的人应该都知晓,直接去浏览器搜索关键词,比如百度搜索某关键词,微博,一行头部灰色小字,“百度为您找到相关结果约100,000,000个”,这就是关键词的竞争度大小,涉及到到你后期关键词排名优化的难易程度,当然这仅仅是一个参考指标。

当然还有一个很重要的参考指标,关键词的百度指数,这是针对已经收录的关键词,大部分应该就是研究百度指数的关键词来进行优化处理,大词都是有指数的!

关键点

asyncio --- 异步 I/O

从 Python 3.4 开始,Python 中加入了协程的概念,但这个版本的协程还是以生成器对象为基础的,在 Python 3.5 则增加了 async/await,使得协程的实现更加方便。

Python 中使用协程最常用的库莫过于 asyncio

asyncio 是用来编写 并发 代码的库,使用 async/await 语法。

asyncio 被用作多个提供高性能 Python 异步框架的基础,包括网络和网站服务,数据库连接库,分布式任务队列等等。

asyncio 往往是构建 IO 密集型和高层级 结构化 网络代码的最佳选择。

event_loop:事件循环,相当于一个无限循环,我们可以把一些函数注册到这个事件循环上,当满足条件发生的时候,就会调用对应的处理方法。

coroutine:中文翻译叫协程,在 Python 中常指代为协程对象类型,我们可以将协程对象注册到时间循环中,它会被事件循环调用。我们可以使用 async 关键字来定义一个方法,这个方法在调用时不会立即被执行,而是返回一个协程对象。

task:任务,它是对协程对象的进一步封装,包含了任务的各个状态。

future:代表将来执行或没有执行的任务的结果,实际上和 task 没有本质区别。

async/await 关键字,是从 Python 3.5 才出现的,专门用于定义协程。其中,async 定义一个协程,await 用来挂起阻塞方法的执行。

asyncio gather和wait并发方式

gather 比 wait 更加高层。

gather 可以将任务分组,一般优先使用 gather。

在某些定制化任务需求的时候,会使用 wait。

单线程


   
  1. #百度搜索结果数(竞争度大小)抓取
  2. # 20201113@author:WX:huguo00289
  3. # -*- coding=utf -8 -*-
  4. import requests,re,time
  5. from fake_useragent  import UserAgent
  6. def search(keyword):
  7.     sum= ''
  8.     ua=UserAgent()
  9.     url=f 'https://www.baidu.com/s?wd={keyword}&ie=UTF-8'
  10.     headers= {
  11.          'User-Agent':ua.random,
  12.          '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',
  13.     }
  14.     try:
  15.         html=requests.get(url,headers=headers,timeout= 5).content.decode( 'utf-8')
  16.         #time.sleep( 1)
  17.         sum=re.search(r '<span class="nums_text">百度为您找到相关结果约(.+?)个</span>',html,re.M|re.I).group( 1)
  18.     except Exception as e:
  19.          print(f "错误代码: {e}")
  20.      if sum != '':
  21.          print(keyword,sum)
  22. def main():
  23.     keywords=[ "seo优化技巧", "百度站长平台", "sem怎么学习", "全网推广营销", "seo网站优化方案", "百度烧钱推广", "自媒体推广策划"]
  24.      for keyword in keywords:
  25.         search(keyword)
  26.      print( '共运行了{}秒'.format(end - start))  # 程序耗时

asyncio+aiohttp 异步-wait


   
  1. async def get_content(keyword):
  2.     ua = UserAgent()
  3.     headers = {
  4.          'User-Agent': ua.random,
  5.          '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',
  6.     }
  7.     async with aiohttp.ClientSession() as session:
  8.         response = await session.get(f 'https://www.baidu.com/s?wd={keyword}&ie=UTF-8',headers=headers,timeout= 5)
  9.         content = await response.read()
  10.          return content
  11. async def get_num(keyword):
  12.     sum= ''
  13.     content = await get_content(keyword)
  14.     try:
  15.         html=content.decode( 'utf-8')
  16.         #time.sleep( 1)
  17.         sum=re.search(r '<span class="nums_text">百度为您找到相关结果约(.+?)个</span>',html,re.M|re.I).group( 1)
  18.     except Exception as e:
  19.          print(f "错误代码: {e}")
  20.      if sum != '':
  21.          print(keyword,sum)
  22. def run():
  23.     tasks = []
  24.     start = time.time()  # 记录起始时间戳
  25.     keywords=[ "seo优化技巧", "百度站长平台", "sem怎么学习", "全网推广营销", "seo网站优化方案", "百度烧钱推广", "自媒体推广策划"]
  26.     loop = asyncio.get_event_loop()
  27.      for keyword in keywords:
  28.         c = get_num(keyword)
  29.         # 通过返回的协程对象进一步封装成一个任务对象
  30.         task = asyncio.ensure_future(c)
  31.         tasks. append(task)
  32.     loop.run_until_complete(asyncio.wait(tasks))
  33.     end = time.time()  # 获取结束时间戳
  34.      print( '共运行了{}秒'.format(end - start))  # 程序耗时

asyncio+aiohttp 异步-gather


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

完整demo请关注本渣渣公众号:二爷记

后台回复关键词:异步爬虫 

获取py文件

参考来源

  • [1] asyncio --- 异步 I/O — Python 3.9.0 文档

  • [2] asyncio+aiohttp异步爬虫

  • [3] Python爬虫学习笔记 asyncio+aiohttp 异步爬虫原理和解析

  • [4] 从0到1,Python异步编程的演进之路

  • [5] asyncio gather和wait并发方式


转载:https://blog.csdn.net/minge89/article/details/109685500
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场