Python如何采集关键词数据
创始人
2024-02-23 03:42:13
0

对于seo而言,关键词的排名对网站优化起到决定性作用,关键词排名情况,流量来源、以及同行的网站数据,都可以通过SEO来查询。常见的爱站站长工具,站长工具以及5118都是不错的网站。

当然现今比较全,以及用得比较广泛的就是5118!

从数据而言,以及功能上来看,5118是非常强大的!

有条件的话还是付费吧!

5118的反爬做的还是非常不错的!

需要登录才能采集,发现5118更新过一次!

比如登录账号需要经过滑块验证码的反爬限制,关键词指数等方面的数据都是图片加密的形式来展现,本渣渣头秃也是破解不来,怕了怕了。。

不过,有些数据还是可以拿来参考的!so,python搞起来!

我们来查询一个设计网站,设计癖的关键词情况

爬取网址:

https://www.5118.com/seo/baidupc/www.shejipi.com

不是付费会员的话,只能查看前一百页数据!

不少数据都是反爬限制,比较可惜!

虽然5118会员登录存在滑块验证码的情况,但是cookies登录还是非常好用的!

我们通过手动添加cookies来登录采集想要的数据。

几个关键点:

1、添加协议头

headers={'Accept': 'application/json, text/javascript, */*; q=0.01','Accept-Encoding': 'gzip, deflate, br','Accept-Language': 'zh-CN,zh;q=0.9','Connection': 'keep-alive','Content-Length': '0','Cookie': Cookies,'Host': 'www.5118.com','Origin': 'https://www.5118.com','Referer': 'https://www.5118.com/','User-Agent': ua,'X-Requested-With': 'XMLHttpRequest',}自行添加ua和cooikes!

当然这是一个完整的协议头,有些可以删除的,可自行尝试!

2、zip函数的使用以及格式化数据处理

for keyword,rank,title,link,index_link in zip(keywords,ranks,titles,links,index_links):data=[keyword,rank.xpath('string(.)').strip().replace(' ','').replace('\r\n','-'),self.get_change(rank),title,unquote(link.split('target=')[-1]),'https:{}'.format(index_link),]print(data)

3、排名波动的情况处理

通过源码查询可知,green为排名上升,red为排名下降,这里写了判断来获取!

#判断排名是否提升
def get_change(self,rank):rank=etree.tostring(rank).decode('utf-8')if "red" in str(rank):change="下降"elif "green" in str(rank):change = "提升"else:change = "不变"return change

4、关键词数据写入csv

写了一个案例,以及找了两个参考案例

import csv
#关键词数据写入csv
def write_keywords(self):path='{}_keywords.csv'.format(self.file_name)csvfile = open(path, 'a+')for keyword in self.keyword_datas:csvfile.write('%s\n' % keyword)print("5118关键词搜索数据写入csv成功!")#参考一
def write_csv(self):path = "aa.csv"with open(path, 'a+') as f:csv_write = csv.writer(f)data_row = ["1", "2"]csv_write.writerow(data_row)# 参考二
def wcsv(self):csvfile = open('csvtest.csv', 'w')writer = csv.writer(csvfile)writer.writerow(['keywords'])data = [('1', 'http://www.xiaoheiseo.com/', '小黑'),('2', 'http://www.baidu.com/', '百度'),('3', 'http://www.jd.com/', '京东')
]
writer.writerows(data)
csvfile.close()

5、查询网站相关关键词数据写入excel表格

使用第三方库, xlsxwriter#数据写入excle表格
def write_to_xlsx(self):workbook = xlsxwriter.Workbook('{}_search_results.xlsx'.format(self.file_name))  # 创建一个Excel文件worksheet = workbook.add_worksheet(self.file_name)title = ['关键词', '排名', '排名波动', '网页标题', '网页链接', '长尾词链接']  # 表格titleworksheet.write_row('A1', title)for index, data in enumerate(self.data_lists):num0 = str(index + 2)row = 'A' + num0worksheet.write_row(row, data)workbook.close()
print("5118搜索数据写入excel成功!")

由于页码也是js生成,没有找到,所以页码自行输入吧!

输入查询网站网址格式为:www.xxx.com/cn 爬取后数据存储文件取用了主域名!

附完整代码:

#5118网站关键词数据获取import requests
from lxml import etree
from urllib.parse import unquote
import xlsxwriter
import time
import csvclass C5118(object):def __init__(self,url,nums):self.keyword_datas=[]self.data_lists=[]self.index_links_hrefs=[]self.headers={'Accept': 'application/json, text/javascript, */*; q=0.01','Accept-Encoding': 'gzip, deflate, br','Accept-Language': 'zh-CN,zh;q=0.9','Connection': 'keep-alive','Content-Length': '0','Cookie': Cookies,'Host': 'www.5118.com','Origin': 'https://www.5118.com','Referer': 'https://www.5118.com/','User-Agent': UA,'X-Requested-With': 'XMLHttpRequest',}self.post_url=urlself.file_name=url.split('.')[1]self.pagenums=nums#判断排名是否提升def get_change(self,rank):rank=etree.tostring(rank).decode('utf-8')if "red" in str(rank):change="下降"elif "green" in str(rank):change = "提升"else:change = "不变"return change#获取数据def get_data(self,pagenum):url="https://www.5118.com/seo/baidupc"params={'isPager': 'true','viewtype': '2','days': '90','url': self.post_url,'orderField': 'Rank','orderDirection': 'asc','pageIndex': pagenum,   #页码'catalogName': '',}response=requests.post(url,params=params,headers=self.headers)time.sleep(1)print(response.status_code)doc=etree.HTML(response.content.decode('utf-8'))keywords= doc.xpath('//tr[@class="list-row"]/td[1]/a/text()')  #关键词print(keywords)self.keyword_datas.extend(keywords)ranks = doc.xpath('//tr[@class="list-row"]/td[2]/a') #排名titles = doc.xpath('//tr[@class="list-row"]/td[5]/a/text()') #网页标题links=doc.xpath('//tr[@class="list-row"]/td[5]/a/@href') #网页链接index_links=doc.xpath('//tr[@class="list-row"]/td[7]/a/@href') #长尾词数量链接self.index_links_hrefs.extend(index_links)for keyword,rank,title,link,index_link in zip(keywords,ranks,titles,links,index_links):data=[keyword,rank.xpath('string(.)').strip().replace(' ','').replace('\r\n','-'),self.get_change(rank),title,unquote(link.split('target=')[-1]),'https:{}'.format(index_link),]print(data)self.data_lists.append(data)time.sleep(4)return self.data_lists#关键词数据写入csvdef write_keywords(self):path='{}_keywords.csv'.format(self.file_name)csvfile = open(path, 'a+')for keyword in self.keyword_datas:csvfile.write('%s\n' % keyword)print("5118关键词搜索数据写入csv成功!")#数据写入excle表格def write_to_xlsx(self):workbook = xlsxwriter.Workbook('{}_search_results.xlsx'.format(self.file_name))  # 创建一个Excel文件worksheet = workbook.add_worksheet(self.file_name)title = ['关键词', '排名', '排名波动', '网页标题', '网页链接', '长尾词链接']  # 表格titleworksheet.write_row('A1', title)for index, data in enumerate(self.data_lists):num0 = str(index + 2)row = 'A' + num0worksheet.write_row(row, data)workbook.close()print("5118搜索数据写入excel成功!")def main(self):for i in range(1,self.pagenums+1):print(f'>>> 正在采集第{i}页关键词数据...')self.get_data(i)print("数据采集完成!")self.write_keywords()self.write_to_xlsx()if __name__=="__main__":url = "www.shejipi.com"nums=100spider=C5118(url,nums)spider.main()

相关内容

热门资讯

AWSECS:访问外部网络时出... 如果您在AWS ECS中部署了应用程序,并且该应用程序需要访问外部网络,但是无法正常访问,可能是因为...
AWSElasticBeans... 在Dockerfile中手动配置nginx反向代理。例如,在Dockerfile中添加以下代码:FR...
银河麒麟V10SP1高级服务器... 银河麒麟高级服务器操作系统简介: 银河麒麟高级服务器操作系统V10是针对企业级关键业务...
北信源内网安全管理卸载 北信源内网安全管理是一款网络安全管理软件,主要用于保护内网安全。在日常使用过程中,卸载该软件是一种常...
AWR报告解读 WORKLOAD REPOSITORY PDB report (PDB snapshots) AW...
AWS管理控制台菜单和权限 要在AWS管理控制台中创建菜单和权限,您可以使用AWS Identity and Access Ma...
​ToDesk 远程工具安装及... 目录 前言 ToDesk 优势 ToDesk 下载安装 ToDesk 功能展示 文件传输 设备链接 ...
群晖外网访问终极解决方法:IP... 写在前面的话 受够了群晖的quickconnet的小水管了,急需一个新的解决方法&#x...
不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...
Azure构建流程(Power... 这可能是由于配置错误导致的问题。请检查构建流程任务中的“发布构建制品”步骤,确保正确配置了“Arti...