Scrapy爬取戴尔社区网站出现0页面爬取无输出问题
问题根因
爬虫启动后爬取0页面、直接退出,是代码存在4处明显错误,和站点反爬无关:
- 初始请求方法名拼写错误:Scrapy 约定生成初始爬取请求的方法名是
start_requests(结尾带s,复数形式),你写的是单数的start_request,框架无法识别到这个方法,不会生成任何爬取请求,启动后直接走完关闭流程,这是日志显示0页面爬取的核心原因。 allowed_domains配置错误:该参数仅接受纯域名值,你填入的www.dell.com/community携带了路径片段,后续就算请求发出,也会被Scrapy自带的域名过滤组件拦截。- 请求头格式错误:
scrapy.Request的headers参数要求传入字典结构,你直接传入了字符串格式的User-Agent,请求头格式不符合HTTP规范,会被站点直接拦截。 - XPath逻辑错误:循环解析条目时,你使用
//开头的全局XPath,而非以./开头的相对当前节点的路径,就算页面正常返回,也只会重复抓取第一条帖子的内容,无法遍历所有条目;同时原XPath仅选中了外层表格节点,没有定位到每一行帖子的节点。
修正后的完整代码
import scrapy class DellLatitudeSpider(scrapy.Spider): name = 'dell_latitude' allowed_domains = ['www.dell.com'] def start_requests(self): headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.5060.114 Safari/537.36' } yield scrapy.Request( url='https://www.dell.com/community/Latitude/bd-p/Latitude?ref=lithium_menu', callback=self.parse, headers=headers ) def parse(self, response): # 定位到每一行帖子条目节点 for activity in response.xpath("//table[@class='lia-list-wide']//tr[contains(@class, 'lia-list-row')]"): yield { 'board': 'Laptops', 'sub board': 'Latitude', # 用相对路径取当前条目下的内容 'title': activity.xpath(".//a[@class='page-link lia-link-navigation lia-custom-event']/text()").get().strip(), 'url': response.urljoin(activity.xpath(".//a[@class='page-link lia-link-navigation lia-custom-event']/@href").get()) }
修正后重新运行爬虫即可正常发起请求、抓取帖子数据。
内容的提问来源于stack exchange,提问作者Adithya Jere
相关产品推荐
相关产品推荐

