该爬虫使用 Scrapy 框架爬取京东上华为、小米、苹果三个品牌的手机信息,包括名称、价格、评价数量、是否自营、颜色、屏幕尺寸、CPU型号、RAM和ROM等参数信息。爬取到的数据会保存为一个名为'phones.xls' 的 Excel 文件,每个品牌的手机信息会保存在不同的 sheet 中。/n/n在爬取过程中,会对数据进行去重处理,确保同款手机只保存一次信息。/n/n代码示例:/n/npython/nimport scrapy/nimport re/nimport json/nimport xlwt/n/nclass JDPhoneSpider(scrapy.Spider):/n name = 'jdphone'/n allowed_domains = ['jd.com']/n start_urls = [/n 'https://search.jd.com/Search?keyword=华为手机&enc=utf-8&wq=华为手机',/n 'https://search.jd.com/Search?keyword=小米手机&enc=utf-8&wq=小米手机',/n 'https://search.jd.com/Search?keyword=苹果手机&enc=utf-8&wq=苹果手机'/n ]/n custom_settings = {/n 'DOWNLOAD_DELAY': 1,/n 'CONCURRENT_REQUESTS_PER_DOMAIN': 1,/n 'USER_AGENT': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'/n }/n/n def parse(self, response):/n # 获取搜索结果页中的所有手机链接/n phone_links = response.css('div#J_goodsList li.gl-item div.p-name a::attr(href)').extract()/n for link in phone_links:/n yield scrapy.Request(link, callback=self.parse_phone)/n/n # 获取下一页链接/n next_page = response.css('a.fp-next::attr(href)').extract_first()/n if next_page:/n yield scrapy.Request('https://search.jd.com' + next_page, callback=self.parse)/n/n def parse_phone(self, response):/n # 获取手机名称、价格、评价数量、是否自营/n name = response.css('div.sku-name::text').extract_first().strip()/n price = response.css('div.summary-price-wrap span.p-price strong::text').extract_first()/n comment_count = response.css('div.comment-count a::text').extract_first()/n is_self_operated = '是' if response.css('div.self-operated').extract_first() else '否'/n/n # 获取手机参数信息/n params = {}/n param_items = response.css('ul.parameter2 li')/n for item in param_items:/n key = item.css('span.p-name::text').extract_first().strip()/n value = item.css('span.p-value::text').extract_first().strip()/n params[key] = value/n/n # 将数据保存为item/n item = {/n 'name': name,/n 'price': price,/n 'comment_count': comment_count,/n 'is_self_operated': is_self_operated,/n 'params': params/n }/n yield item/n/n def closed(self, reason):/n # 将数据保存为excel文件/n book = xlwt.Workbook(encoding='utf-8')/n sheet = book.add_sheet('phones')/n row = 0/n sheet.write(row, 0, '品牌')/n sheet.write(row, 1, '型号')/n sheet.write(row, 2, '价格')/n sheet.write(row, 3, '评价数量')/n sheet.write(row, 4, '是否自营')/n sheet.write(row, 5, '颜色')/n sheet.write(row, 6, '屏幕尺寸')/n sheet.write(row, 7, 'CPU型号')/n sheet.write(row, 8, 'RAM')/n sheet.write(row, 9, 'ROM')/n for brand in ['华为', '小米', '苹果']:/n phones = self.get_phones_by_brand(brand)/n models = set([phone['name'] for phone in phones])/n for model in models:/n phones_of_model = [phone for phone in phones if phone['name'] == model]/n phone = phones_of_model[0]/n row += 1/n sheet.write(row, 0, brand)/n sheet.write(row, 1, phone['name'])/n sheet.write(row, 2, phone['price'])/n sheet.write(row, 3, phone['comment_count'])/n sheet.write(row, 4, phone['is_self_operated'])/n for key, value in phone['params'].items():/n if key == '颜色':/n sheet.write(row, 5, value)/n elif key == '屏幕尺寸':/n sheet.write(row, 6, value)/n elif key == 'CPU型号':/n sheet.write(row, 7, value)/n elif key == 'RAM':/n sheet.write(row, 8, value)/n elif key == 'ROM':/n sheet.write(row, 9, value)/n book.save('phones.xls')/n/n def get_phones_by_brand(self, brand):/n phones = []/n for item in self.crawler.stats.get_stats():/n if item[0].startswith('jdphone'):/n data = json.loads(item[1])/n if data['name'] == brand:/n phones.extend(data['phones'])/n return phones/n/n def process_item(self, item, spider):/n # 对数据进行去重处理/n brand = re.search(r'(/w+)手机', spider.start_urls[0]).group(1)/n model = item['name']/n for item in self.crawler.stats.get_stats():/n if item[0].startswith('jdphone'):/n data = json.loads(item[1])/n if data['name'] == brand:/n phones = data['phones']/n if any([phone['name'] == model for phone in phones]):/n return item/n else:/n phones.append(item)/n self.crawler.stats.set_value('jdphone', json.dumps({'name': brand, 'phones': phones}))/n return item/n self.crawler.stats.set_value('jdphone', json.dumps({'name': brand, 'phones': [item]}))/n return item/n/n/n运行结果内容:/n/n该爬虫会爬取京东上华为、小米、苹果三个品牌的手机信息,包括名称、价格、评价数量、是否自营、颜色、屏幕尺寸、CPU型号、RAM和ROM等参数信息。爬取到的数据会保存为一个名为'phones.xls'的Excel文件,每个品牌的手机信息会保存在不同的sheet中。/n/n在爬取过程中,会对数据进行去重处理,确保同款手机只保存一次信息。/n

京东手机信息爬虫 - 华为、小米、苹果手机数据抓取

原文地址: https://www.cveoy.top/t/topic/ol9P 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录