毕设 基于Hadoop的电子产品推荐系统 

系统需要大量的电子产品信息 ,爬取的是中关村的数据(没有像京东一样的反爬机制)

使用scrapy spider 爬取页面信息中,可以获取部分页面数据,但爬取一些页面时,会报错503 Service Unavailable

部分代码详情

 def parse(self, response):
        if response.status == 503:
            # 处理503响应的逻辑,例如等待一段时间后重新发送请求
            yield scrapy.Request(response.url, callback=self.parse, dont_filter=True, meta=response.meta, priority=0)
        else:
            for li in response.xpath('//*[@id="J_PicMode"]/li'):
                item = {}

                item['href'] = li.xpath('a/@href').get()
                if item['href'] is not None:
                    full_url = 'https://detail.zol.com.cn' + item['href']
                    # print(full_url)
                    # 创建新的请求,并指定新的回调函数 parse_details
                    yield scrapy.Request(full_url, callback=self.parse_details, meta={'item': item})
                    # time.sleep(0.5)

    def parse_details(self, response):
        # 在这里执行针对详情页面的操作,可以继续使用 XPath 或其他方式提取所需的信息
        # 例如:
        item = response.meta['item']
        # item['imghref'] = response.xpath('//*[@id="_j_tag_nav"]/ul/li[3]/a/@href').get()
        # if item['imghref'] is not None:
        #     full_imghref_url = 'https://detail.zol.com.cn' + item['imghref']
        #     # print(full_imghref_url)
        #     # 创建新的请求,并指定新的回调函数 parse_canshuhref
        #     yield scrapy.Request(full_imghref_url, callback=self.parse_imghref, meta={'item': item})

        item['canshuhref'] = response.xpath('//*[@id="_j_tag_nav"]/ul/li[2]/a/@href').get()
        if item['canshuhref'] is not None:
            full_canshuhref_url = 'https://detail.zol.com.cn/' + item['canshuhref']

            # 创建新的请求,并指定新的回调函数 parse_canshuhref
            yield scrapy.Request(full_canshuhref_url, callback=self.parse_canshuhref, meta={'item': item})

这里制作简单的记录,经过多方查找也没有解决出现的问题,爬取一千个页面获取的也就300多条数据

今天爬取图片时,偶然发现代码中的问题

full_canshuhref_url = 'https://detail.zol.com.cn/' + item['canshuhref']

在我的python代码中所有用xpath获取的地址都是不全的(只有后半部分,前半部分是固定的域名),我使用了上面的这种方式合成了地址信息作为request的请求地址,在这过程中就出现了一个问题

由于通过xpath获取的href中    开头都带有 /   我在地址整合时又加入了 https://detail.zol.com.cn/

地址就变成了https://detail.zol.com.cn//cell_phone/index1494545.shtml

可见中间部分合成了   //  

虽然这样的地址确实可以通过浏览器搜索到,但是scrapy就会报错503 然后一直retry,最后只获取到少量的数据

(初学scrapy 函数命名不规范,只以此记录编程过程出现的问题)

 




Posted on 2024-03-23 15:34  鱼忆七秒瓶中沙  阅读(21)  评论(0编辑  收藏  举报