爬虫实践项目--scrapy爬取当当网前100页数据
以下是一个使用Scrapy框架爬取当当网前100页数据的简化示例。请确保您已安装Scrapy,并且对Scrapy的基本使用有所了解。
首先,创建一个新的Scrapy项目:
scrapy startproject dangdang_crawler
然后,定义爬虫:
# dangdang_crawler/spiders/dangdang_product.py
import scrapy
class DangdangProductSpider(scrapy.Spider):
name = 'dangdang_product'
allowed_domains = ['dangdang.com']
start_urls = ['http://category.dangdang.com/pg1-cid4002197.html'] # 示例url,根据实际情况修改
def parse(self, response):
# 提取商品信息
for product in response.css('ul.product li.product-item'):
item = {
'name': product.css('div.name a::text').extract_first(),
'price': product.css('div.price span.price-now::text').extract_first(),
'comment_count': product.css('div.star span::text').extract_first(),
'shop_name': product.css('div.shopname::text').extract_first(),
}
yield item
# 提取下一页链接并进行爬取
next_page_url = response.css('div.paging a.next::attr(href)').extract_first
if next_page_url:
yield response.follow(next_page_url, self.parse)
接下来,定义Item Pipeline来保存数据:
# dangdang_crawler/pipelines.py
class DangdangCrawlerPipeline(object):
def __init__(self):
self.file = open('products.csv', 'w', encoding='utf-8')
self.file.write('"Name","Price","Comment Count","Shop Name"\n')
def process_item(self, item, spider):
line = '"{name}","{price}","{comment_count}","{shop_name}"\n'.format(**item)
self.file.write(line)
return item
def close_spider(self, spider):
self.file.close()
最后,启动爬虫:
scrapy crawl dangdang_product
这个爬虫会爬取当当网的前100页数据,每一页的商品信息包括商品名称、价格、评论数和店铺名,并将结果保存到CSV文件中。注意,根据实际情况,您可能需要处理登录状态、处理Ajax加载的数据、应对反爬虫策略等问题,并且在爬取过程中遵守当当网的robots.txt协议以及法律法规。
评论已关闭