京东商品爬取 - 使用 Scrapy 框架
import scrapy
class JDSpider(scrapy.Spider):
"""京东商品爬虫"""
name = 'jd'
allowed_domains = ['jd.com']
start_urls = ['https://www.jd.com/']
def parse(self, response):
"""解析首页,获取所有商品分类链接"""
# 获取所有商品的链接
links = response.css('.cate_menu_item a::attr(href)').extract()
for link in links:
yield scrapy.Request(link, callback=self.parse_category)
def parse_category(self, response):
"""解析商品分类页,获取所有商品链接"""
# 获取该分类下所有商品的链接
links = response.css('.gl-item .p-name a::attr(href)').extract()
for link in links:
yield scrapy.Request(link, callback=self.parse_product)
def parse_product(self, response):
"""解析商品详情页,获取商品信息并保存到文件"""
try:
# 获取商品的名称、价格和链接
name = response.css('.sku-name::text').extract_first().strip()
price = response.css('.price .price::text').extract_first().strip()
link = response.url
# 存储到CSV文件中
with open('products.csv', 'a') as f:
f.write(f'{name},{price},{link}
')
except Exception as e:
# 发生异常时记录到日志中
self.logger.error(f'Failed to parse product: {response.url}, {e}')
代码说明:
- 类名:
JDSpider,继承自scrapy.Spider类。 - name: 爬虫名称,用于标识爬虫。
- allowed_domains: 允许爬取的域名,这里只允许爬取
jd.com域名下的网页。 - start_urls: 爬虫起始 URL,这里设置为京东首页。
- parse 函数: 解析首页,获取所有商品分类链接。
- parse_category 函数: 解析商品分类页,获取所有商品链接。
- parse_product 函数: 解析商品详情页,获取商品信息并保存到文件。
- 异常处理: 使用
try...except语句捕获异常,并将错误信息记录到日志中。
使用方法:
- 安装 Scrapy 框架:
pip install scrapy - 创建 Scrapy 项目:
scrapy startproject jd_spider - 将上述代码保存到
jd_spider/jd_spider/spiders/jd.py文件中。 - 运行爬虫:
scrapy crawl jd
注意:
- 代码中的 CSS 选择器可能需要根据京东网站的实际情况进行调整。
- 爬取网站信息需要遵守网站的 robots.txt 协议,避免过度爬取导致网站服务器压力过大。
- 爬取网站信息时,请尊重网站的版权,不要进行任何违法行为。
原文地址: https://www.cveoy.top/t/topic/oeSR 著作权归作者所有。请勿转载和采集!