Python可切片对象的重要性毋庸置疑,你需要更好的方法!
优采云 发布时间: 2021-08-24 00:12Python可切片对象的重要性毋庸置疑,你需要更好的方法!
对于seoer来说,关键词的重要性是毋庸置疑的。有很多方法可以挖掘关键词。平台工具是必要的。如果要批量获取关键词数据,需要更好的方法!
比如py大法就不错!
Webmaster Tools 无疑是一个旧的 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:正数和负数都可以接受。绝对值决定切割数据时的“步长”,符号决定“切割方向”,正值表示“从左到右”,负值表示“从右到左”的值。省略步长时,默认为1,即从左到右取值,步长为1。 "切割方向很重要!"方向很重要!" "方向很重要重要!” “,重要的事情说三遍!
start_index:表示起始索引(包括索引对应的值);省略该参数时,表示取自对象的“终点”。至于是从“起点”还是“终点”开始,由步长参数决定正负确定,步长从“起点”为正,从“终点”为负。<//p
pend_index:表示结束索引(不包括索引对应的值);省略该参数时,表示数据已经取到“终点”,是到“起点”还是“终点”也由步长参数Decide的正负决定,当step 为正时,将前往“终点”,为负时,将前往“起点”。/p
p案例申请:/p
ppre class="prism-token token language-javascript"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] # 收录量/pre/p
p3.zip 功能应用/p
p使用 zip() 函数合并列表并创建元组对列表/p
pzip() 函数用于将一个可迭代对象作为参数,将对象中对应的元素打包成元组,然后返回这些元组的列表。/p
p如果每个迭代器的元素个数不一致,则返回列表的长度与最短的对象相同。使用 * 运算符,可以将元组解压缩为列表。/p
ppre class="prism-token token language-javascript"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)/pre/p
p4.excel 数据保存/p
ppre class="prism-token token language-javascript"# 保存关键词数据为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 成功!")/pre/p
p操作效果:/p
pexe工具打包地址:/p
p提取码:/p
p4y24/p
p如何使用exe:/p
p第一步:解压,打开,txt,添加关键词/p
p第 2 步:运行 exe/p
p第 3 步:等待并完成/p
p有完整的源代码:/p
ppre class="prism-token token language-javascript"#站长工具关键词挖掘
# -*- 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):
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('========================采集结果========================\n\n')
for datas in datas_list:
print(datas)
print('\n\n========================采集结束========================\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('========================采集结果========================\n\n')
for datas in datas_list:
print(datas)
print('\n\n========================采集结束========================\n')
bcsj(keyword, datas_list)
time.sleep(8)
else:
print('--- 批量查询模式开启失败!')
print('>>>开启手动查询模式!')
main()
if __name__ == '__main__':
print('\n========================工具说明========================')
print('站长工具关键词挖掘采集工具-by huguo002\n')
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()