科技网站建设-【python】挖出同行的网站,跟踪同

2021-05-01 22:07

--------

科技网站建设

-------思明,技术性宅男SEO之路      【python】挖出同行业的网站,追踪同行业网站
有情况下大家在做站的情况下期待可以找出同行业的网站做为参照,或找出同行业做得好的网站,也就是市场竞争对手的网站。
假如只是简易的人力百度搜索,也可以搜索出来一些,可是大家又怎样可以明确,哪一个网站做得好,哪一个网站做得差呢?
我是这模样实际操作的:
例如我想做一个盆栽花卉苗木制造行业的网站,要找出做得好的市场竞争对手
第一步:根据百度搜索重要词专用工具挖出盆栽花卉有关语汇
词的数量越多越好,依据制造行业的尺寸来定,盆栽花卉我挖了16000个。
有关词   检索量
盆栽花卉照片大全 1812
斗南盆栽花卉拍卖管理中心 985
盆栽花卉 964
盆栽花卉饲养 810
盆栽花卉网 478
盆栽花卉销售市场 429
盆栽花卉照片 317
盆栽花卉大全 225
深圳市盆栽花卉租摆 216
盆栽花卉种子 212
第二步:应用专用工具把这些词放到百度搜索(英文用谷歌)中检索
纪录每一个词第一页的网站,只需要提取主网站域名便可,随后依据名次赋于分值。这里我用python完成。以下编码供参照,不可以够立即应用,由于用了Mongodb做为数据信息储存。

#!/usr/bin/python
# -*- coding: utf-8 -*-
import sys
import time
import datetime
import re
import traceback
import StringIO
import gzip
import urllib
import urllib2
import cookielib
import pymongo
import hashlib
from bs4 import BeautifulSoup
 
class collectProductByApi(object):
    connection=None
    db=None
    cat='flower'
    t=int(datetime.datetime.now().strftime('%Y%m%d'))
    def getDb(self):
     while (not self.db) or (not self.db.is_mongos):
         self.connection=pymongo.MongoClient( 127.0.0.1:1111 )
         self.db=self.connection.monitor
         if (not self.db) or (not self.db.is_mongos):
            print cannot connection to MongoDB
            time.sleep(10)
     return self.db
 
    def main(self):
 
     obj=Tool()
     while 1:
         word=self.getDb().word.find_one({'cat':self.cat,'t':{'$lt':self.t}})
         if word:
            result=obj.getBaiduSearch(word['w'])
            if len(result)==0:
             print word['w'].encode('gb2312','ignore'),0
            for domain in result:
             _analyse_id=self.cat+str(self.t)+domain['d']
             _analyse_id=hashlib.md5(_analyse_id.encode('utf8')).hexdigest()
             isExsit=self.getDb().analyse.find_one({'_id':_analyse_id})
             score=self.getScore(domain['i'])
             if not isExsit:
                 doc={'_id':_analyse_id,'cat':self.cat,'domain':domain['d'],'score':score,'num':1,'t':self.t}
                 self.getDb().analyse.insert(doc)
             else:
                 self.getDb().analyse.update({'_id':_analyse_id},{'$inc':{'num':1,'score':score}})
             print word['w'].encode('gb2312','ignore'),domain['i'],domain['d']
            self.getDb().word.update({'_id':word['_id']},{'$set':{'t':self.t}})   
         else:
            self.rank()
            print 'End'
            return
         time.sleep(3)
 
    def getScore(self,index):
     x=0
     result = {
        1: lambda x: 28.56,
        2: lambda x: 19.23,
        3: lambda x: 10.20,
        4: lambda x: 8.14,
        5: lambda x: 7.50,
        6: lambda x: 5.72,
        7: lambda x: 4.01,
        8: lambda x: 4.41,
        9: lambda x: 5.53,
        10: lambda x: 6.70
     }[index](x)
     return result
 
    def rank(self):
     analyse_rows=self.getDb().analyse.find({'cat':self.cat,'rank':None})
     for row in analyse_rows:
         rank=row['score']/row['num']
         row['rank']=rank
         self.getDb().analyse.save(row)
         print self.cat,row['domain'],rank
     print 'End Rank'
 
class Tool(object):
 
    def getBaiduSearch(self,word):
     domains=[]
     url= 's?wd=%s' % urllib.quote_plus(word.encode('utf8'))
     request = urllib2.Request(url)
     request.add_header('User-Agent', 'Mozilla/5.0 (Windows NT 5.2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.101')
     request.add_header('Referer',url)
     request.add_header('Accept-Language','zh-CN,zh;q=0.8')
     request.add_header('Accept-Encoding','gzip,deflate,sdch')
     request.add_header('Accept','text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.')
     try:
         response = urllib2.urlopen(request)
         html = response.read()
        &pressedstream = StringIO.StringIO(html)
         gzipper = gzip.pressedstream)
         data = gzipper.read()
 
         soup = BeautifulSoup(data)
     except:
         return domains
     tables=soup.findAll('table',pile(r'^\d{1,2}
     for table in tables:
         index=table[ id ]
         index=int(index)
         span=table.find('span',{'class':'g'})
         if span:
            site=span.text
            site=re.search(r'([a-zA-Z0-9\.\-]+)',site)
            domain=site.grou凡科抠图(1)[0]
            domains.append({'d':domain,'w':word,'i':index})
     return domains
 
 
if __name__ == '__main__':
    obj=collectProductByApi()
    print obj.main()
拷贝编码

出来的結果

到这里依据总分排一下序,随后除去一下百度搜索之类的服务平台,人力挑选下,也就可以大致明确出制造行业的关键市场竞争对手了。
这里的权值是一个很成心义的数据信息,长期性追踪一个网站的排名权值,能够了解网站有木有被降权之类的。
最终的結果:

       google    baidu
Rank1: 34.35   28.56
Rank2: 16.96   19.23
Rank3: 11.42   10.20
Rank4: 7.73      8.14
Rank5: 6.19      7.50
Rank6: 5.05      5.72
Rank7: 4.02      4.01
Rank8: 3.47      4.41
Rank9: 2.85      5.53
Rank10: 2.71   6.70
欢迎拍砖。
这类做法觉得功效比较有限,有点纯为技术性而作技术性的觉得。由于剖析市场竞争对手网站的情况下,剖析的要素十分多,自身手工制作检索也不费多少时间,手工制作检索后,作出的剖析结果也因网站的不一样而有一定的不一样。

杰哥
这类做法觉得功效比较有限,有点纯为技术性而作技术性的觉得。由于剖析市场竞争对手网站的情况下,剖析的要素十分多,自身 ...
手工制作的結果還是比较扯的,太费时间间,沒有高效率,結果还不一定靠谱。
楼主有時间能够共享一下收集百度搜索重要词的py源代码 给大伙儿参照的话 会调动大伙儿积极主动性的!!!
赞一个。这套方式也是我一向用的思路,能够客观性掌握到制造行业SEO的真正市场竞争状况,而并不是靠觉得。
具体上常常会出現著名站点的SEO主要表现欠佳好的状况,但许多人却总是将著名站点做为关键参照,不太适合。
顺带两个小提议:
1. 编码方面偏臃肿,特别大段的编码贴在论坛让人有点没耐心去看。提议做个控制模块出来,将常见的免费下载网页页面等流程独立放到控制模块中,主编码便可以显得清新许多。
2. 比较根网站域名(eg. )的排名状况,觉得大大部分情况下比比照子网站域名(eg. )的排名状况更有效。技术性完成上,比较简易的提取方法是人力置顶些.之类的特例一级域名,随后看状况用正则表达式来提取根网站域名。
杰哥
这类做法觉得功效比较有限,有点纯为技术性而作技术性的觉得。由于剖析市场竞争对手网站的情况下,剖析的要素十分多,自身 ...
这类做法的重要在于,能够把排名状况真实出色的网站客观性反映出来。手工制作随意搜两个词,和具体状况常常差别极大。
最终的剖析,自是人力去剖析。
看到 【python】挖出同行业的网站,追踪同行业 这个帖子里 想起之前在别处看到的 (怎样发掘合理的外推資源 火车头实例教程) 忽然发现后者也可用于 挖出制造行业内网站    且针对非技术性帝 還是很有效的。随之将其改名 发于此处 并留下连接。

实际完成 全过程以下(发不了照片 不知道是何缘故。实际实际操作方式 想看的還是去原帖看吧)
1.梳理重要词
2.开启火车头大批量导入梳理好的网站地址
3.百度搜索检索結果编码规律性剖析
4.循环系统标准创建
5.导出来收集結果
6.运用excl公式剖析数据信息    =countif(A:A,A1)   统计分析A列同样个数
c0901yuan
本想将此帖 做为单帖推送 但 论坛 不知道何因 一直发不了。 现将其发于此于
用火车头挖制造行业内网站
麻烦出示一下不可以发帖与不可以发照片的实际状况,诸如是点一下按钮沒有反映,還是其它状况。
这样便捷排盘问题,尽可能防止后续发帖不会改变的状况。
ZERO
麻烦出示一下不可以发帖与不可以发照片的实际状况,诸如是点一下按钮沒有反映,還是其它状况。
这样便捷排盘问 ...
照片 传不上   发贴子网页页面 载入不彻底。。估算是我网速的缘故
恩,很非常好,这样能够提取出色的网站,我这边在想些一个提取前10 网站各项外界数据信息的比照,终究其网站內部的数据信息较难获得 ---------

科技网站建设

------------


扫描二维码分享到微信

在线咨询
联系电话

020-66889888