百度网页关键字抓取(如何利用Python编程,让SEO工作变的更高效? )
优采云 发布时间: 2021-11-26 15:11百度网页关键字抓取(如何利用Python编程,让SEO工作变的更高效?
)
免责声明:我是一个编程菜鸟。为了强迫自己在实战中学习Python,我答应朋友制作一套视频课程,讲解如何使用Python编程让SEO工作更高效。
和朋友讨论,初步定义了几个SEO工具的需求,打算用Python来实现:
1、指定规则,扫描并导出所有有效的URL网站
2、 批量抓取页面标题判断SERP前三页是否存在(判断索引)
3、批量搜索关键词前N页的所有搜索结果,并导出标题和URL(用于查找外部资源)
4、 批量抓取页面标题,判断标题在当前搜索引擎中的相似度(判断标题是否可用)
5、 指定第一个词汇,抓取搜索引擎相关搜索,用结果词导出结果词的相关搜索词,导出,重复N次。(关键词 库,提高页面相关性的内部链接)
6、 服务器日志批量处理,通过PY实现,日志批量筛选和有效导出。
7、 通过非法词列表扫描指定页面是否有非法词。
...
我希望依靠这些例子来编程,让大家得到python可以帮助我解决实际问题的印象,并通过简单的修改在实际工作中使用它们。
如果你从 hello world 开始,大多数人在看不到希望的时候就会放弃。(我经历过很多次,有很深的体会)
在学习中,有时“急功近利”是好事。
-------------------
本次以第五项需求为例,完成一段已实现的python代码,主要目的是抓取百度相关搜索词。
为了满足实际应用,本要求进行了扩展:
A. 支持输入多词扩展百度相关搜索词。
B. 您可以指定哪些词必须或不能收录在要求中。
C、可以将采集收到的文字保存为txt文件,文件名可以自定义。
未来可以进一步改进的工作:
1、多线程采集
2、使用代理IP采集
3、更多容错判断
下面是具体代码,为了便于理解,几乎每一行都有注释,不要太啰嗦。(有些说法可能有误)
# coding = utf-8
'''
1、指定关键词,抓取搜索引擎相关搜索词,并使用结果词再次抓取其相关搜索词。
2、采集时对搜索相关词做处理,必须包含某些关键词或不能包含的词才作为有效词。
3、指定希望获得的最终相关词数量。
获得的搜索相关词用途:增加关键词库,提升内部链接相关性,分析用户的搜索行为,广告投放等等。
'''
#导入http请求库request
import requests
#导入随机数库
import random
#导入时间库
import time
#导入日期库
import datetime
# 导入URL解析库
from urllib import parse
# 导入BeautifulSoup库,使用别名bs
from bs4 import BeautifulSoup as bs
# 定义获取相关词的函数,@words是希望拓展的词根列表,@num是希望获取的相关词数量(大概)
def get_related_words(words, num=10):
for word in words:
# 当已有词数量小于希望获取的词数时
if(len(words) =0):
continue
# 如果没有包含不允许的词,则进入下面的处理过程
else:
# 如果定义了必须包含的词
if must_contain is not None:
# 循环必须包含的词
for w in must_contain:
# 把w都转换为小写字符,因为百度搜索相关词中英文都是小写,之后查询是否包含必须有的词(>=0表示至少包含一次)
if i.find(w.lower())>=0:
rs.append(i)
# 如果没有定义必须包含的词,则所有词直接加入列表中。
else:
rs.append(i)
# 如果没有定义不能包含的词
else:
# 解释同上
if must_contain is not None:
for w in must_contain:
if i.find(w.lower())>=0:
rs.append(i)
else:
rs.append(i)
# 返回最终过滤后的词列表
return rs
# 打算拓展的词根
root_words = ['QQ', '腾讯']
# 根据词根进行相关词采集,指定最终采集词量
words = get_related_words(root_words, 30)
# 定义必须包含的关键词列表
must_contain = ['大全']
# 定义不能包含的关键词列表
should_not_contain = ['手游']
# 输出不加任何过滤规则获得的相关搜索词
rule1 = filter_words(words)
print("不加任何过滤规则获得的相关搜索词")
print_list(rule1)
rule2 = filter_words(words, must_contain)
print("指定必须包含的关键词后获得的相关搜索词")
print_list(rule2)
rule3 = filter_words(words, must_contain, should_not_contain)
print("指定必须包含的关键词和不能包含的关键词后获得的相关搜索词")
print_list(rule3)
# 把不同过滤规则处理后获得的词写入指定的文件中
save_to_file(rule1, 'all_words')
save_to_file(rule2, 'must_contain_words')
save_to_file(rule3, 'filter_words')
# 不做过滤处理,也不指定文件名,按程序启动时间作为文件名保存结果。
save_to_file(words)
# 输出实际获得的总词数
print("总共词数:{0}".format(len(rule1)))
print("必须包含指定词数量:{0}".format(len(rule2)))
print("最严过滤规则词:{0}".format(len(rule3)))