多线程制作sitemap地图,集合到工具集
这次在我的工具集中,增加一个新功能,就是sitemap地图的制作,核心思路当然是爬取网站所有页面,并对页面进行数据清洗,包括去重、分类、url类别判断。然后再将功能集合到seo工具集中。
在代码部分,简单介绍一下,解析页面,然后通过BeautifulSoup对页面url进行提取,对url进行判断,同域名下的url都是目标url,再把目标url放入集合中。
def get_new_urls(base_url,html):
soup = BeautifulSoup(html, 'html.parser', from_encoding='utf-8')
links = soup.find_all('a', href=re.compile(r".*"))
all_url = []
for link in links:
new_url = link['href']
new_url_full = urljoin(base_url,new_url)
if new_url_full.find(base_url) < 0:continue
if not guolve(base_url,new_url_full):continue
all_url.append(new_url_full)
all_url.insert(0,base_url)
return all_url
def parse_html(url):
if url is None:
return
url = quote(url, safe="?#/:=@")
try:
res = requests.get(url=url,timeout=5)
if res.status_code == requests.codes.ok:
res.encoding = res.apparent_encoding
return res.text
except:
return将返回的列表数据,带入到线程中,再进行循环请求,获取下一批url。并对下一批url进行判断和去重
最后,把返回的url几个用xml的格式,进行写入xml文件的格式就可以了。
fw = open(filename, 'w', encoding="utf-8")
fw.write('<?xml version="1.0" encoding="UTF-8"?>')
fw.write(
'\n<urlset xmlns="http://video.sitemaps.org/schemas/sitemap/0.9">'
)
root_url = urlparse(data[0]).netloc
if not re.compile(r"http://").findall(root_url) and not re.compile(r"https://").findall(root_url):
root_url = "http://" + root_url
data = list(set(data))
for url in data:
# url = data['url']
fw.write('\n\t<url>')
fw.write('\n\t\t<loc>' + url + '</loc>')
fw.write("\n\t\t<lastmod>" +time.strftime('%Y-%m-%d', time.localtime(time.time())) +
"</lastmod>")
fw.write('\n\t\t<changefreq>daily</changefreq>')
if re.findall(root_url + "$", url) or re.findall(
root_url + "/$", url):
fw.write('\n\t\t<priority>1.0</priority>')
elif re.findall(root_url + "[^/]*/$",
url) or re.findall(
root_url + "/[^/]*/$", url):
fw.write('\n\t\t<priority>0.8</priority>')
elif re.findall(root_url + "[^/]*/[^/]*$",
url) or re.findall(
root_url + "/[^/]*/[^/]*$", url):
fw.write('\n\t\t<priority>0.6</priority>')
else:
fw.write('\n\t\t<priority>0.4</priority>')
fw.write('\n\t</url>')
fw.write('\n</urlset>')在工具集中,我将sitemap功能也添加进去了,这样,在工具集中,可以很方便去使用。在挖掘页面的时候,可以选择挖掘的数量,如果不指定挖掘数量,就代表挖掘网站所有的页面url。并且这些url都是不重复的。
在导出数据时候,就可以将这些页面导出位XXX.XML格式的文件了。
有需要这款工具集合,可以私信我。






