Python中scrapy框架的crawlspider爬虫问题请教!

创建了 scrapy 框架中的 crawlspider 抓取全网站信息时,网页源代码中的相对链接并没有被转化为绝对链接,导致抓取的整个网站信息不全,请教大神,该怎么办
Python中scrapy框架的crawlspider爬虫问题请教!

5 回复

用自带方法拼接
<br>response.urljoin()<br>


问题分析: 从标题看,你的问题是关于Scrapy框架中CrawlSpider的使用。CrawlSpider是Scrapy的一个强大扩展,特别适合规则驱动的爬虫,但规则(Rule)和链接提取器(LinkExtractor)的配置容易出问题。

核心解决方案: 最常见的问题是规则没生效或重复爬取。下面是一个完整的可运行示例,演示如何正确配置CrawlSpider:

import scrapy
from scrapy.spiders import CrawlSpider, Rule
from scrapy.linkextractors import LinkExtractor

class MyCrawlSpider(CrawlSpider):
    name = 'example_crawler'
    allowed_domains = ['example.com']
    start_urls = ['http://www.example.com/']
    
    # 关键:rules必须是元组
    rules = (
        # 第一条规则:提取所有符合正则的链接继续跟进
        Rule(
            LinkExtractor(
                allow=r'/page/\d+/',  # 匹配/page/数字/的链接
                deny=r'/login/',       # 排除登录页面
                restrict_xpaths='//div[@class="pagination"]'  # 只在指定区域提取
            ),
            callback='parse_item',     # 回调函数名
            follow=True                # 是否跟进这些链接
        ),
        # 第二条规则:提取其他链接但不回调,只跟进
        Rule(
            LinkExtractor(allow=r'/category/'),
            follow=True
        ),
    )
    
    def parse_item(self, response):
        """处理具体页面的回调函数"""
        item = {
            'url': response.url,
            'title': response.css('h1::text').get(),
            'content': response.css('.article-content ::text').getall()
        }
        yield item

# 运行命令:scrapy runspider this_file.py -o output.json

关键点说明:

  1. rules必须是元组:很多人写成列表[]会导致规则不生效
  2. LinkExtractor参数
    • allow:正则表达式,匹配要提取的URL模式
    • deny:排除的URL模式
    • restrict_xpaths:限制在特定HTML区域内提取链接
  3. Rule参数
    • callback:指定处理响应的函数名(字符串)
    • follow:是否从当前响应中继续提取链接
  4. 避免重复爬取:Scrapy默认有去重机制,但确保allowed_domains设置正确

常见问题排查:

  • 如果规则不生效,检查rules是否是元组
  • 如果链接没被提取,检查allow正则是否正确
  • 如果回调函数没执行,确认callback参数是否正确传递

一句话建议: 仔细检查rules的元组格式和LinkExtractor的正则匹配。

我是这样的。。
from urllib.parse import urljoin
yield Request(url=urljoin(response.url, url), callback=)

您好,我把我的问题给你详细描述一下,请您帮我解决一下。
用的是 crawlspider 爬取乐融商城全部的网站源代码,但是爬取到精选配件页面(全部分类选项里面)时,由于商品(“比如:乐视蓝牙耳机”)的链接只是相对的,结果导致无法爬取商品页面源代码

您好,我把我的问题给你详细描述一下,请您帮我解决一下。
用的是 crawlspider 爬取乐融商城全部的网站源代码,但是爬取到精选配件页面(全部分类选项里面)时,由于商品(“比如:乐视蓝牙耳机”)的链接只是相对的,结果导致无法爬取商品页面源代码

回到顶部