解决方案:站长工具关键词挖掘采集,Python关键词批量挖掘采集工具

优采云 发布时间: 2022-12-14 14:29

  解决方案:站长工具关键词挖掘采集,Python关键词批量挖掘采集工具

  对于seoer来说,关键词的重要性毋庸置疑。关键词 的挖矿方式有很多种。有必要使用平台工具。批量获取关键词数据,你需要一个更好的方法!

  比如py大法好!

  站长工具无疑是一个老牌的SEO工具平台。尽管它广受诟病,但它的重要性和作用不容置疑!

  目标网址:

  几个关键点:

  1. 考虑到有些关键词可能在站长工具关键词中找不到,所以这里是第一个过滤器!

  # 查询关键词是否能找到相关的关键字

def search_keyword(keyword):

data = {

'kw': keyword,

'page': '1',

'by': '0',

}

url = "http://stool.chinaz.com/baidu/words.aspx"

html = requests.post(url, data=data, headers=ua()).text

time.sleep(3)

con = etree.HTML(html)

key_result = con.xpath('//div[@class="col-red lh30 fz14 tc"]/text()')

try:

key_result = key_result[0] # 没有找到相关的关键字

except:

key_result = []

return key_result

  如果没有找到关键词相关数据,则停止运行程序,保存查询到的关键词数据!

   with open('no_search_keyword.txt','a+',encoding='utf-8') as f:

f.write(keyword)

print("该关键词已保存到 no_search_keyword.txt 文档中!")

  2.关键数据数据的处理,切片工具的应用

  Python可切片对象的索引方式有:正索引和负索引。

  如下图,以列表对象a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]为例:

  切片是一个非常重要又好用的操作,相信你也会用得上!

  一个完整的切片表达式收录两个“:”来分隔三个参数(start_index、end_index、step)。当只有一个“:”时,默认第三个参数step=1;当没有“:”时,start_index=end_index,表示剪切start_index指定的元素。

  切片操作基本表达式:

  object[start_index:end_index:step]

  step:正数和负数都可以。绝对值决定切割数据时的“步长”,符号决定“切割方向”。正值表示“从左到右”,负值表示“从右到左”值。省略step时,默认为1,即从左到右取值,步长为1。 "切割方向很重要!" "切割方向很重要!" "切割方向很重要!”,重要的事情说三遍!

  start_index:表示起始索引(包括索引对应的值);当省略该参数时,表示从对象的“终点”取值,从“起点”还是“终点”开始取值由step参数的正负决定,步长为正时从“起点”开始,为负时从“终点”开始。

  end_index:表示结束索引(不包括索引对应的值);当省略该参数时,表示一路取数据的“终点”。为正时,到达“终点”,为负时,到达“起点”。

  案例应用:

  overall_indexs = keyword_all_datas[0::5] # 整体指数

pc_indexs = keyword_all_datas[1::5] # pc指数

mobile_indexs = keyword_all_datas[2::5] # 移动指数

s360_indexs = keyword_all_datas[3::5] # 360指数

collections = keyword_all_datas[4::5] # 收录量

  3、zip功能的应用

  使用 zip() 函数合并列表并创建元组对列表

  zip()函数用于将一个可迭代对象作为参数,将对象中对应的元素打包成元组,然后返回由这些元组组成的列表。

  如果每个迭代器的元素个数不一致,则返回列表的长度与最短对象相同,可以使用*运算符将元组解压成列表。

  for key_word, overall_index, pc_index, mobile_index, s360_index, collection, ip, first_place_href, first_place_title in zip(

key_words, overall_indexs, pc_indexs, mobile_indexs, s360_indexs, collections, ips, first_place_hrefs,

first_place_titles

):

data = [

key_word,

overall_index,

pc_index,

mobile_index,

s360_index,

collection,

ip,

first_place_href,

first_place_title,

]

print(data)

  4.保存excel数据

  # 保存关键词数据为excel格式

def bcsj(keyword, data):

workbook = xlwt.Workbook(encoding='utf-8')

booksheet = workbook.add_sheet('Sheet 1', cell_overwrite_ok=True)

title = [['关键词', '整体指数', 'PC指数', '移动指数', '360指数', '预估流量(ip)', '收录量', '网站首位链接', '网站首位标题']]

title.extend(data)

# print(title)

for i, row in enumerate(title):

for j, col in enumerate(row):

booksheet.write(i, j, col)

workbook.save(f'{keyword}.xls')

print(f"保存关键词数据为 {keyword}.xls 成功!")

  运行结果:

  exe工具打包地址:

  提取码:

  4y24

  exe的使用方法:

  第一步:解压,打开,txt,添加关键词

  第二步:运行exe

  第三步:等待,完成

  附上完整源码:

  #站长工具关键词挖掘

# -*- coding=utf-8 -*-

#by 微信:huguo00289

import requests

from lxml import etree

import re

import xlwt

import time

from fake_useragent import UserAgent

#构建随机协议头

def ua():

ua=UserAgent()

headers = {'User-Agent':ua.random}

return headers

# 查询关键词是否能找到相关的关键字

def search_keyword(keyword):

<p>

data = {

'kw': keyword,

'page': '1',

'by': '0',

}

url = "http://stool.chinaz.com/baidu/words.aspx"

html = requests.post(url, data=data, headers=ua()).text

time.sleep(3)

con = etree.HTML(html)

key_result = con.xpath('//div[@class="col-red lh30 fz14 tc"]/text()')

try:

key_result = key_result[0] # 没有找到相关的关键字

except:

key_result = []

return key_result

# 获取关键词页码数和记录条数

def get_page_number(keyword):

data = {

'kw': keyword,

'page': '1',

'by': '0',

}

url = "http://stool.chinaz.com/baidu/words.aspx"

html = requests.post(url, data=data, headers=ua()).text

time.sleep(3)

con = etree.HTML(html)

page_num = con.xpath('//span[@class="col-gray02"]/text()')

page_numberze = r'共(.+?)页'

page_number = re.findall(page_numberze, page_num[0], re.S)

page_number = page_number[0]

total_data = con.xpath('//p[@class="col-gray lh24 fr pr5"]') # 数据记录

total_datas = total_data[0].xpath('string(.)') # 获取节点所有文本

print(f'挖掘关键词:{keyword}-{total_datas}')

return page_number

# 获取关键词数据

def get_keyword_datas(keyword, page_number):

datas_list = []

for i in range(1, page_number + 1):

print(f'正在采集第{i}页关键词挖掘数据...')

data = {

'kw': keyword,

'page': i,

'by': '0',

}

# print(data)

url = "http://stool.chinaz.com/baidu/words.aspx"

html = requests.post(url, data=data, headers=ua()).text

time.sleep(3)

# print(html)

con = etree.HTML(html)

key_words = con.xpath('//p[@class="midImg"]/a/span/text()') # 关键词

# print(key_words)

keyword_all_datas = []

keyword_datas = con.xpath('//ul[@class="ResultListWrap "]/li/div[@class="w8-0"]/a')

for keyword_data in keyword_datas:

keyword_data = keyword_data.text

if keyword_data != None:

keyword_all_datas.append(keyword_data)

# print(keyword_all_datas)

overall_indexs = keyword_all_datas[0::5] # 整体指数

# print(overall_indexs )

pc_indexs = keyword_all_datas[1::5] # pc指数

# print(pc_indexs)

mobile_indexs = keyword_all_datas[2::5] # 移动指数

# print(mobile_indexs)

s360_indexs = keyword_all_datas[3::5] # 360指数

# print(s360_indexs)

collections = keyword_all_datas[4::5] # 收录量

# print(collections)

ips = con.xpath('//ul[@class="ResultListWrap "]/li/div[@class="w15-0 kwtop"]/text()') # 预估流量

if ips == []:

ips = ['--']

# print(ips)

first_place_hrefs = con.xpath(

'//ul[@class="ResultListWrap "]/li/div[@class="w18-0 lh24 tl"]/a/text()') # 首页位置链接

if first_place_hrefs == []:

first_place_hrefs = con.xpath('//ul[@class="ResultListWrap "]/li/div[@class="w18-0 lh24 tl"]/text()')

# print(first_place_hrefs)

first_place_titles = con.xpath(

'//ul[@class="ResultListWrap "]/li/div[@class="w18-0 lh24 tl"]/p[@class="lh17 pb5"]/text()') # 首页位置标题

if first_place_titles == []:

first_place_titles = ['--']

# print(first_place_titles)

data_list = []

for key_word, overall_index, pc_index, mobile_index, s360_index, collection, ip, first_place_href, first_place_title in zip(

key_words, overall_indexs, pc_indexs, mobile_indexs, s360_indexs, collections, ips, first_place_hrefs,

first_place_titles

):

data = [

key_word,

overall_index,

pc_index,

mobile_index,

s360_index,

collection,

ip,

first_place_href,

first_place_title,

]

print(data)

print('n')

data_list.append(data)

  

time.sleep(3)

datas_list.extend(data_list) # 合并关键词数据

return datas_list

# 保存关键词数据为excel格式

def bcsj(keyword, data):

workbook = xlwt.Workbook(encoding='utf-8')

booksheet = workbook.add_sheet('Sheet 1', cell_overwrite_ok=True)

title = [['关键词', '整体指数', 'PC指数', '移动指数', '360指数', '预估流量(ip)', '收录量', '网站首位链接', '网站首位标题']]

title.extend(data)

# print(title)

for i, row in enumerate(title):

for j, col in enumerate(row):

booksheet.write(i, j, col)

workbook.save(f'{keyword}.xls')

print(f"保存关键词数据为 {keyword}.xls 成功!")

#关键词挖掘主函数

def main():

keyword = input('请输入关键词>>')

print('正在查询,请稍后...')

result = search_keyword(keyword)

if result == "没有找到相关的关键字":

print('n')

print(result)

print("该关键词没有挖掘到关键词数据")

with open('no_search_keywords.txt','a+',encoding='utf-8') as f:

f.write(keyword)

print("该关键词已保存到 no_search_keywords.txt 文档中!")

else:

print('n')

page_number = get_page_number(keyword)

print('n')

print('正在采集关键词挖掘数据,请稍后...')

print('n')

print('========================BUG 反馈微信:huguo00289 ========================n')

print('n')

page_number = int(page_number)

datas_list = get_keyword_datas(keyword, page_number)

print('n')

print('关键词挖掘数据采集结果:')

print('========================采集结果========================nn')

for datas in datas_list:

print(datas)

print('nn========================采集结束========================n')

bcsj(keyword, datas_list)

#txt批量挖掘采集关键词数据

def run():

keywords=[key.strip() for key in open("search_keyword.txt")]

if len(keywords) > 0:

print(f'>>> 共导入{len(keywords)}个关键词数据!')

for keyword in keywords:

print(f'>>> 正在查询采集 {keyword} 关键数据...')

result = search_keyword(keyword)

if result == "没有找到相关的关键字":

print('n')

print(result)

print("该关键词没有挖掘到关键词数据")

with open('no_search_keyword.txt', 'a+', encoding='utf-8') as f:

f.write(keyword)

print("该关键词已保存到 no_search_keyword.txt 文档中!")

else:

print('n')

page_number = get_page_number(keyword)

print('n')

print('正在采集关键词挖掘数据,请稍后...')

print('n')

print('========================BUG 反馈微信:huguo00289 ========================n')

print('n')

page_number = int(page_number)

datas_list = get_keyword_datas(keyword, page_number)

print('n')

print('关键词挖掘数据采集结果:')

print('========================采集结果========================nn')

for datas in datas_list:

print(datas)

print('nn========================采集结束========================n')

bcsj(keyword, datas_list)

time.sleep(8)

else:

print('--- 批量查询模式开启失败!')

print('>>>开启手动查询模式!')

main()

if __name__ == '__main__':

print('n========================工具说明========================')

print('站长工具关键词挖掘采集工具-by huguo002n')

print('默认开启批量采集模式,需满足两个条件:')

print('1.运行目录存在 search_keyword.txt;')

print('2.keywords.txt 内存在关键词数据,关键词一行一个!')

print('否则将开启手动查询模式!n')

print('================= BUG 反馈微信:huguo00289 ============n')

time.sleep(5)

try:

print('>>> 默认开启批量查询模式!')

print('>>> 请稍后...')

run()

except:

print(">>> 未查询到 search_keyword.txt 文档数据!n")

print('--- 批量查询模式开启失败!')

print(">>> 开启手动输入 关键词模式!n")

main()

</p>

  总结:采集文章如何注意时间因子

  问:采集文章如何关注时间因素?

  答:原则上,新文章的发布应使用及时的时间,采集文章是一样的,无论文章 采集何时发布,使用的时间因素都应是发布时间,而这个时间与采集的时间无关。

  这个问题是由

  

  一位朋友在搜外问答中,就时间因素本身而言,理论上应该是文章发布的时间。

  但需要注意的是,搜索引擎虽然会参考文章的时间因素,但仅作为参考,并不能保证对文章原创的正确判断。也就是说,对于采集网站来说,如果你采集的内容搜索引擎还没有收录,那么发布后可能会被视为原创文章。当然,如果你的网站权限低,采集的内容很大,而这些文章已经被收录了,那么你采集的内容就是不必要的垃圾邮件。

  目前,大多数采集都可以通过搜索引擎找到,那么为什么有些网站没有受到处罚呢?原因有二:一是还没有被发现,二是还没有达到惩罚的程度!

  

  总之,当你采集文章的时候,不要带上它的发布时间,当你发布自己的时候,时间因素用的是你自己网站发布的时间。在这里,牧峰SEO还是建议大家尽量不要采集,采集的价格很大。如果你真的写不出原创原则,试着编辑高质量的伪原创文章,这是做SEO的正确方法。

  这篇文章已经帮助了644人!

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线