细数SEO工作中给力的Python小脚本

人生苦短,我用Python。Python就像王者荣耀中的铭文或装备,强有力的武器可以更好地帮助您更好地刷野怪,更快地发育,从而通过等级差找突破口。

应用场景一:过滤敏感,不相关等杂七杂八关键词

# -*- coding: utf-8 -*-
op_txt=open('done.txt','a')

class NaiveFilter():
    def __init__(self):
        self.keywords = set([])

    def parse(self, path):
        for keyword in open(path):
            self.keywords.add(keyword.strip().encode('utf-8').lower())
        # print (self.keywords)

    def filter(self, message, replss=r"*"):
        message = unicode(message).lower()
        for k in self.keywords:
            if k in message:
                message=message.replace(k, replss)
            else:
                op_txt.write('%s\n'%message)

        print (message)
        # return message


if __name__ == '__main__':
    f = NaiveFilter()
    f.parse("keywords")      #keywords里面放要敏感词或不想要的词等
    a=[i.strip() for i in open('hotword.txt').readlines()]      #hotword.txt是将要过滤的词库
    c=len(a)
    for i in range(c):
        f.filter(a[i])

应用场景二:结巴jieba分词计算高频词及TFIDF

#coding=utf-8
import sys
reload(sys)
sys.setdefaultencoding("utf-8")
import jieba       
import jieba.analyse              #导入结巴jieba相关模块
output=open('words.csv','a') 
output.write('词语,词频,词权\n')  
stopkeyword=[line.strip() for line in open('stop.txt').readlines()]  #将停止词文件保存到列表
text = open(r"new.txt","r").read()          #导入需要计算的内容
zidian={}
fenci=jieba.cut_for_search(text)
for fc in fenci:
        if fc in zidian:                
                zidian[fc]+=1
        else:
                # zidian.setdefault(fc,1)   #字典中如果不存在键,就加入键,键值设置为1
                zidian[fc]=1
#计算tfidf
tfidf=jieba.analyse.extract_tags(text,topK=30,withWeight=True)

#写入到csv
for word_weight in tfidf:
    if word_weight in stopkeyword: 
        pass
    else:                                   #不存在的话就输出
        print word_weight[0],zidian.get(word_weight[0],'not found'),str(int(word_weight[1]*100))+'%'
        output.write('%s,%s,%s\n'%(word_weight[0],zidian.get(word_weight[0],'not found'),str(int(word_weight[1]*100))+'%'))

应用场景三:定向定时更新采集

#coding:utf-8
import urllib2,re,lxml,requests,time
from bs4 import BeautifulSoup
str_time=time.strftime('%Y-%m-%d',time.localtime())
op_txt=open('url.txt','a')
url = 'http://www.xxx.com/sitemap/group.htm'
html=requests.get(url).content
soup = BeautifulSoup(html,"lxml")
zidian={}
c=0
with open('url.txt') as f:
    for i in f.readlines():
        i=i.strip()
        zidian['%s'%(i)]=c
        c+=1
for urllist in re.findall(re.compile(r'<li>.*?href="(.*?)" target="_blank">(.*?)</a></li>'),str(soup)):    
    url_data=urllist[0].strip()
    title=urllist[1]
    if '2019' in title: 
        print title,url_data
        if zidian.has_key(url_data):
            print (u'没有更新'+str_time)
            continue
        else:
            print (u'成功更新'+str_time)
            op_txt.writelines('%s\n'%url_data)

应用场景四:百万级别一键生成sitemap文件

import time

date=time.strftime('%Y-%m-%d',time.localtime())
list=[url.strip() for url in open('url.txt').readlines()]

class sitemaps:
    def __init__(self):
        self.n=1

    def name(self,c):
        opxml=open('sitemap%s.xml'%c,'a')
        opxml.write('''<?xml version="1.0" encoding="utf-8"?>
<urlset>\n''')
        return opxml


    def zhizuo(self,urllist):
        xmldata=self.name(self.n)
    #     print '''<?xml version="1.0" encoding="utf-8"?>
    # <urlset>'''
        m=0
        for i in urllist:
            i=i.strip()
            m+=1
            sitemaps='''    <url>
        <loc>'''+str(i)+'''</loc>
        <lastmod>'''+date+'''</lastmod>
        <priority>0.8</priority>
    </url>\n'''
            xmldata.write(sitemaps)

            # print (sitemaps)
            if m==50000:
                self.n+=1
                xmldata.write('</urlset>\n')
                xmldata=self.name(self.n)
                m=0

            else:
                pass
        xmldata.write('</urlset>\n')
        # print ('</urlset>')

if __name__ == '__main__':
    p=sitemaps()
    p.zhizuo(list)

应用场景五:合并目录下的所有日志文件

#coding=utf-8

import os
import sys
import glob

def dirTxtToLargeTxt(dir,outputFileName):
    '''从dir目录下读入所有的TXT文件,将它们写到outputFileName里去'''
    #如果dir不是目录返回错误

    if not os.path.isdir(dir):
        print ("传入的参数有错%s不是一个目录" %dir)
        return False
    #list all txt files in dir
    outputFile = open(outputFileName,"a")

    for txtFile in glob.glob(os.path.join(dir,"*.txt")):
        print (txtFile)
        inputFile = open(txtFile,"rb")

        for line in inputFile:
            outputFile.write(line)
    return True

if __name__ =="__main__":
    if len(sys.argv) < 3:
        print ("Usage:%s dir outputFileName" %sys.argv[0])
        sys.exit()
    dirTxtToLargeTxt(sys.argv[1],sys.argv[2])

应用场景六:批量插入文章到帝国CMS数据库

#encoding=utf-8
import MySQLdb,time
import sys
reload(sys)
sys.setdefaultencoding('utf8')

time.strftime('%Y-%m-%d',time.localtime(time.time()))

a='杨百辉博客'
b='http://bigwayseo.com/'

title_list=[]
title_list.append(int(time.time()))
title_list.append(a)

contnet_list = []
contnet_list.append(b)

try:
    conn=MySQLdb.connect(host='localhost',user='root',passwd='root',db='empirecms',port=3306,charset='utf8')
    cur=conn.cursor()

    cur.execute("""INSERT INTO `phome_ecms_news` (`classid`, `userid`, `username`, `newstime`, `havehtml`, `title`, `smalltext`) VALUES ('2', '1', 'admin', %s, '1', %s, '')""",title_list)
    cur.execute("""update `phome_ecms_news` set filename = @@IDENTITY where id = @@IDENTITY""")
    cur.execute("""update `phome_ecms_news` set titleurl = concat('/sanwen/',@@IDENTITY,'.html') where id = @@IDENTITY""")
    cur.execute("""INSERT INTO `phome_ecms_news_data_1` (`id`, `classid`, `dokey`, `newstext`) VALUES (@@IDENTITY, '2', '1', %s); """,contnet_list)
    cur.execute("""INSERT INTO `phome_ecms_news_index` (`id`, `classid`, `checked`, `havehtml`) VALUES (@@IDENTITY, '2',  '1', '1')""")

    conn.commit()
    cur.close()
    conn.close()
except MySQLdb.Error,e:
     print "Mysql Error %d: %s" % (e.args[0], e.args[1])

合理适量地使用Python有助于提高工作效率,以及愉悦身心。有句话怎么说来着:少写怡情,多写伤发啊~

以上。

阅读剩余
THE END