豌豆Ai站群搜索引擎系统 V.25.10.25 网址:www.wd.chat

🗣 Wd提问: Scrapy SEO爬虫

🤖 Ai回答:
Scrapy SEO爬虫实现方案

下面是一个使用Scrapy框架实现的SEO爬虫方案,用于抓取网站的关键SEO元素并进行分析。

爬虫设计思路

这个爬虫将抓取以下关键SEO元素:
页面标题(Title)
元描述(Meta Description)
H1标签内容
页面URL
响应状态码
规范链接(Canonical URL)
图片alt属性
内部链接和外部链接
页面内容关键词密度

实现代码

1、创建Scrapy项目
bash
scrapy startproject seo_spider
cd seo_spider
scrapy genspider seo_crawler 65.hk

2、定义数据模型(items.py)
python
import scrapy

class SeoItem(scrapy.Item):
url = scrapy.Field()
status = scrapy.Field()
title = scrapy.Field()
meta_description = scrapy.Field()
h1 = scrapy.Field()
canonical_url = scrapy.Field()
word_count = scrapy.Field()
image_alts = scrapy.Field()
internal_links = scrapy.Field()
external_links = scrapy.Field()
keyword_density = scrapy.Field()

3、实现爬虫(seo_crawler.py)
python
import scrapy
from seo_spider.items import SeoItem
from urllib.parse import urljoin, urlparse
from collections import Counter
import re

class SeoCrawlerSpider(scrapy.Spider):
name = 'seo_crawler'
allowed_domains = ['65.hk']
start_urls = ['http://65.hk/']
custom_settings = {
'DEPTH_LIMIT': 3,
'CONCURRENT_REQUESTS': 16,
'ROBOTSTXT_OBEY': True,
'USER_AGENT': 'Mozilla/5.0 (compatible; SEOBot/1.0; +http://yourdomain.com/bot)'
}

def parse(self, response):
创建SEO项目
item = SeoItem()
item['url'] = response.url
item['status'] = response.status

提取标题
title = response.xpath('//title/text()').get()
item['title'] = title.strip() if title else None

提取元描述
meta_desc = response.xpath('//meta[@name=description]/@content').get()
item['meta_description'] = meta_desc.strip() if meta_desc else None

提取H1标签
h1 = response.xpath('//h1/text()').get()
item['h1'] = h1.strip() if h1 else None

提取规范链接
canonical = response.xpath('//link[@rel=canonical]/@href').get()
item['canonical_url'] = urljoin(response.url, canonical) if canonical else None

提取图片alt属性
image_alts = response.xpath('//img[@alt]/@alt').getall()
item['image_alts'] = [alt.strip() for alt in image_alts if alt.strip()]

计算关键词密度
text_content = ' '.join(response.xpath('//body//text()').getall())
cleaned_text = re.sub(r'\s+', ' ', text_content).strip()
word_count = len(cleaned_text.split())
item['word_count'] = word_count

if word_count 0:
words = cleaned_text.lower().split()
word_freq = Counter(words)
keyword_density = {word: (count / word_count) * 100 for word, count in word_freq.most_common(10)}
item['keyword_density'] = keyword_density

提取链接并分类
all_links = response.xpath('//a/@href').getall()
internal_links = []
external_links = []

for link in all_links:
if not link or link.startswith(('javascript:', 'mailto:', 'tel:')):
continue

absolute_url = urljoin(response.url, link)
parsed_url = urlparse(absolute_url)

if parsed_url.netloc == '' or parsed_url.netloc == urlparse(response.url).netloc:
internal_links.append(absolute_url)
else:
external_links.append(absolute_url)

item['internal_links'] = list(set(internal_links))
item['external_links'] = list(set(external_links))

yield item

递归爬取内部链接
for link in internal_links:
if any(ext in link for ext in ['.jpg', '.png', '.pdf', '.zip']):
continue
yield scrapy.Request(link, callback=self.parse)

4、配置设置(settings.py)
python
BOT_NAME = 'seo_spider'

SPIDER_MODULES = ['seo_spider.spiders']
NEWSPIDER_MODULE = 'seo_spider.spiders'

遵守robots.txt规则
ROBOTSTXT_OBEY = True

并发请求数
CONCURRENT_REQUESTS = 16

下载延迟
DOWNLOAD_DELAY = 0.5

启用AutoThrottle扩展
AUTOTHROTTLE_ENABLED = True

设置User-Agent
USER_AGENT = 'Mozilla/5.0 (compatible; SEOBot/1.0; +http://yourdomain.com/bot)'

配置Pipeline以保存数据
ITEM_PIPELINES = {
'seo_spider.pipelines.SeoSpiderPipeline': 300,
}

启用并配置HTTP缓存
HTTPCACHE_ENABLED = True
HTTPCACHE_EXPIRATION_SECS = 0 永不过期
HTTPCACHE_DIR = 'httpcache'

5、数据存储Pipeline(pipelines.py)
python
import json
import csv
from itemadapter import ItemAdapter

class SeoSpiderPipeline:
def __init__(self):
self.file = open('seo_data.json', 'w', encoding='utf-8')
self.csv_file = open('seo_data.csv', 'w', newline='', encoding='utf-8')
self.csv_writer = csv.writer(self.csv_file)
self.csv_writer.writerow([
'URL', 'Status', 'Title', 'Meta Description', 'H1', 'Canonical URL',
'Word Count', 'Image Alts', 'Internal Links', 'External Links', 'Keyword Density'
])

def process_item(self, item, spider):
写入JSON文件
line = json.dumps(dict(item), ensure_ascii=False) + \n
self.file.write(line)

写入CSV文件
self.csv_writer.writerow([
item.get('url', ''),
item.get('status', ''),
item.get('title', ''),
item.get('meta_description', ''),
item.get('h1', ''),
item.get('canonical_url', ''),
item.get('word_count', ''),
'; '.join(item.get('image_alts', [])),
'; '.join(item.get('internal_links', [])),
'; '.join(item.get('external_links', [])),
json.dumps(item.get('keyword_density', {}))
])

return item

def close_spider(self, spider):
self.file.close()
self.csv_file.close()

6、运行爬虫
bash
scrapy crawl seo_crawler -s JOBDIR=crawls/seo_crawler

数据分析建议

收集数据后,可以进行以下SEO分析:

1、标题优化:
检查标题长度(建议50-60字符)
检测重复标题
确保包含主要关键词

2、元描述分析:
检查描述长度(建议120-160字符)
检测重复描述
确保包含关键词和行动号召

3、H1标签检查:
每个页面应有且只有一个H1标签
H1应与页面内容相关

4、规范链接问题:
检测是否有多个页面指向同一规范URL
检查规范URL是否正确

5、图片优化:
检测缺少alt属性的图片
分析alt文本是否描述性

6、链接结构:
分析内部链接分布
检测死链(404页面)
识别孤立页面

7、关键词密度:
分析关键词分布是否自然
检测关键词堆砌

注意事项

1、尊重robots.txt:确保遵守网站的爬取规则
2、速率限制:设置合理的DOWNLOAD_DELAY,避免对目标服务器造成压力
3、错误处理:增加重试中间件处理临时错误
4、内存管理:对于大型网站,考虑使用数据库存储而非文件
5、合法性:仅在获得授权的情况下爬取网站,遵守数据保护法规

这个Scrapy SEO爬虫提供了

Ai作答

📣 商家广告


姓名

星座

日付VPS

豌豆Ai站群搜索引擎系统

公司


0

IP地址: 163.100.13.20

搜索次数: 0

提问时间: 2025-11-08 14:55:38

🛒 域名购买
965.net.cn
gang.hk
robots.red
xuanhuo.com.cn
ndgj.cn
lw.gs
kaosou.com.cn
diaowang.com.cn
qn.gs
67.gs

❓️ 热门提问
好用的dns服务器
机房防雷测试
超便宜云主机
bluehost vps云主机
ip 16 pro
便宜的网站开发服务
vps网页版
MySQL源码查询优化器
ip服务代理器
个人网站注册域名
豌豆Ai站群搜索引擎系统

🌐 域名评估
vivo.hl.cn
f.mo.cn
pujs.cn
ff.sx.cn
vtoly.com
3.bj.cn
stih.cn
ijuwo.com
uav.xj.cn
tesla.ha.cn

⛏ 最新挖掘
凯里酸汤鱼
贵阳烤脑花
都匀毛尖茶
花溪牛肉粉
贵阳烤生蚝
贵阳烤豆腐
贵阳纸包鱼
贵阳特色菜

🖌 热门作画

🤝 关于我们:
豌豆Ai 域名 建站 站群 留痕 推广 评估 源码
开发Ai 工具 日记 价格 加盟 广告 流量 留言 联系

🗨 加入群聊
群

🔗 友情链接
商标注册  搜尋引擎排名  ai提问

🧰 站长工具
Ai工具  whois查询  搜索

📢 温馨提示:本站所有问答由Ai自动创作,内容仅供参考,若有误差请用“联系”里面信息通知我们人工修改或删除。

👉 技术支持:本站由豌豆Ai提供技术支持,使用的最新版:《豌豆Ai站群搜索引擎系统 V.25.10.25》搭建本站。

上一篇 80876 80877 80878 下一篇