毕设 基于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 函数命名不规范,只以此记录编程过程出现的问题)
标签:full,Unavailable,Service,canshuhref,url,parse,item,scrapy,报错 From: https://www.cnblogs.com/woaixing711/p/18091162