飞道的博客

【Python与SEO】搜狗微信搜索下拉框词采集多线程/异步采集源码公布

304人阅读  评论(0)

随意写了一下,更多可关注本渣渣微信公众号:二爷记!!

欢迎与本渣渣交流!!!

运行效果:

搜狗微信搜索下拉框词采集核心代码参考:


   
  1. #微信搜索下拉词采集
  2. #首发:微信公众号:二爷记
  3. #author:微信:huguo00289
  4. # -*- coding: UTF -8 -*-
  5. import requests
  6. from fake_useragent  import UserAgent
  7. from urllib  import parse
  8. #采集微信搜索下拉词
  9. def get_words(keyword):
  10.     word=parse.quote(keyword)
  11.     headers={
  12.          "User-Agent":UserAgent().random,
  13.     }
  14.     url= "https://weixin.sogou.com/sugg/ajaj_json.jsp?key={}".format(word)
  15.     html=requests.get(url=url,headers=headers,timeout= 5).text
  16.     content=html.replace( "window.sogou.sug(", '').replace( ')', '').split( ',[')[ 1]
  17.     words=content.replace( "]", '').replace( '"', '').split( ',')
  18.      print( "采集 {} 微信搜索下拉词成功!".format(keyword))
  19.      print(words)
  20.      print( "-"* 100)
  21.      return words

写的比较渣,见谅,尤其是那段字符格式化处理,咯里吧嗦的!!

多线程采集源码参考:


   
  1. #微信搜索下拉词采集
  2. #首发:微信公众号:二爷记
  3. #author:微信:huguo00289
  4. # -*- coding: UTF -8 -*-
  5. import requests
  6. from fake_useragent  import UserAgent
  7. from urllib  import parse
  8. import threading
  9. #采集微信搜索下拉词
  10. def get_words(keyword):
  11.     word=parse.quote(keyword)
  12.     headers={
  13.          "User-Agent":UserAgent().random,
  14.     }
  15.     url= "https://weixin.sogou.com/sugg/ajaj_json.jsp?key={}".format(word)
  16.     html=requests.get(url=url,headers=headers,timeout= 5).text
  17.     content=html.replace( "window.sogou.sug(", '').replace( ')', '').split( ',[')[ 1]
  18.     words=content.replace( "]", '').replace( '"', '').split( ',')
  19.      print( "采集 {} 微信搜索下拉词成功!".format(keyword))
  20.      print(words)
  21.      print( "-"* 100)
  22.      return words
  23. #多线程采集微信搜索下拉词
  24. def smt_words(words):
  25.     threadings=[]
  26.      for word in words:
  27.         t= threading.Thread(target=get_words,args=(word,))
  28.         threadings. append(t)
  29.         t.start()
  30.      for x in threadings:
  31.         x.join()
  32.      print( "多线程采集微信搜索下拉词完成!")
  33. if __name__== '__main__':
  34.     words=get_words( "21考研")
  35.     smt_words(words)

异步采集源码参考


   
  1. #微信搜索下拉词异步采集
  2. #首发:微信公众号:二爷记
  3. #author:微信:huguo00289
  4. #https: //www.cnblogs.com/shenh/p/9090586.html
  5. #https: //blog.csdn.net/a__int__/article/details/104600972
  6. # -*- coding: UTF -8 -*-
  7. from fake_useragent  import UserAgent
  8. from urllib  import parse
  9. import aiohttp
  10. import asyncio
  11. loop = asyncio.get_event_loop()
  12. class Async_get_words:
  13.     def __init__(self):
  14.         super().__init__() #super().__init__(),就是继承父类的init方法,同样可以使用super()点 其他方法名,去继承其他方法
  15.         self.CONCURRENCY =  10 #并发量为 10
  16.         self.session = None
  17.         self.semaphore = asyncio.Semaphore(self.CONCURRENCY) #限制并发量
  18.         self.headers={
  19.              "User-Agent":UserAgent().random,
  20.         }
  21.     #异步协议访问
  22.     async def request(self, url):
  23.         async with self.semaphore:
  24.             # try:
  25.              print( 'getting', url)
  26.             # 添加ssl=False 防止SSLCertVerificationError
  27.             async with self.session.get(url,ssl=False,headers=self.headers) as response:
  28.                 await asyncio.sleep( 1)
  29.                  return await response.read()
  30.             # except client_exceptions.ServerDisconnectedError:
  31.             #      print( 'ServerDisconnectedError occurred while scraping ',url)
  32.     #处理数据
  33.     async def get_words(self,keyword):
  34.         word = parse.quote(keyword)
  35.         url =  "https://weixin.sogou.com/sugg/ajaj_json.jsp?key={}".format(word)
  36.         repsonse= await self.request(url)
  37.         # print(repsonse)
  38.         html =repsonse.decode( 'gbk') #用utf -8解析
  39.          print(html)
  40.         content = html.replace( "window.sogou.sug("'').replace( ')''').split( ',[')[ 1]
  41.         words = content.replace( "]"'').replace( '"''').split( ',')
  42.          print( "采集 {} 微信搜索下拉词成功!".format(keyword))
  43.          print(words)
  44.          print( "-" *  100)
  45.          return words
  46.     async def main(self,keywords):
  47.         self.session = aiohttp.ClientSession()
  48.         # 添加任务一行写法
  49.         tasks = [asyncio.ensure_future(self.get_words(keyword))  for keyword in keywords]
  50.         # tasks = []
  51.         #  for keyword in keywords:
  52.         #     tasks. append(asyncio.ensure_future(self.get_words(keyword)))
  53.         await asyncio.gather(*tasks)
  54.         await self.session. close()
  55.     def run(self):
  56.         keywords=[ '21考研时间''21考研政治答案''21考研数学答案''21考研英语答案''21考研英语''21考研政治''21考研人数''21考研成绩什么时候公布''21考研准考证打印时间''21考研答案']
  57.         loop.run_until_complete(self.main(keywords))
  58. if __name__ ==  '__main__':
  59.     spider=Async_get_words()
  60.     spider.run()

完整项目源码 

请关注本渣渣微信公众号:二爷记

后台回复:微信搜索下拉词 

获取所有代码

相关阅读:

SEO工具脚本,Python百度下拉框关键词采集工具


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