我的爬虫以京东女装的外套为例进行,抓取更大的分类可以再进行修改。

scrapy的安装,建工程什么的我就不说了,工程结构如图

crawlCoat内容如下:

# -*- coding: utf-8 -*-
from JdCoat.items import JdcoatItem
from scrapy.http import Request
from scrapy.selector import Selector
from scrapy.contrib.linkextractors.lxmlhtml import LxmlLinkExtractor
from scrapy.contrib.spiders import Rule, CrawlSpiderclass JdCrawl(CrawlSpider):name = "crawlcoat"allowed_domins = ["jd.com"]start_urls = ["http://list.jd.com/list.html?cat=1315,1343,9712",#外套
#                     "http://list.jd.com/list.html?cat=1315,1343,9717"#长裤]
#这里主要是抽取产品的url和下一页的url,并分别调用各自的回调函数,默认调用parse,也就是直接请求网页不做相关处理
#还有一个方法是,不写rule,直接重写parse方法,方法里分别获取产品url和下一页url,也很好用rules = [Rule(LxmlLinkExtractor(allow="/\d{10}.html"), callback="parseItemurl",),Rule(LxmlLinkExtractor(allow=("/list.html\?cat=1315%2C1343%2C9712&page=\d+&JL=6_0_0"), restrict_xpaths=("//a[@class='next']")),follow=True)]
    def parseItemurl(self,response):itemurl = response.xpath("//div[@id='choose-color']/div[2]/div")i = 1for url in itemurl.xpath("a/@href").extract():item = JdcoatItem()item['color'] = response.xpath("//div[@id='choose-color']/div[2]/div["+str(i)+"]/a/@title").extract()  i = i + 1r = Request(url,callback=self.parseDetail)r.meta['item'] = item                 yield rdef parseDetail(self, response):mainurl = response.urlproductid = mainurl[19:29]
#京东价格是js生成的,我只会这样获取产品价格# 模拟js访问此网站,获取商品价格,返回的是strpriceUrl = 'http://p.3.cn/prices/mgets?skuIds=J_' + productid + 'J_'r = Request(priceUrl,callback=self.parsePrice) #请求 价格地址sel = Selector(response)#item = JdcoatItem()
        item = response.meta['item']product_detail = sel.xpath("//ul[@class='detail-list']/li")i = 0#获取其他信息elseInfo = ''for info in product_detail.xpath("text()").extract():            infoList = info.encode('utf-8').split(":")#获取店铺标签所在的位置i = i + 1key = infoList[0]value = infoList[1]if(key == "商品编号"):item['productID'] = valueelif(key == "上架时间"):item['time'] = valueelif(key == "店铺"):item['shop'] = sel.xpath("//ul[@class='detail-list']/li["+str(i)+"]/a/text()").extract()item['shop_url'] = sel.xpath("//ul[@class='detail-list']/li["+str(i)+"]/a/@href").extract()elif(key == "商品毛重"):item['weight'] = valueelif(key == "商品产地"):item['addr'] = valueelif(key == "尺码"):item['size'] = valueelif(key == "材质"):item['material'] = valueelif(key == "颜色"):item['color'] = valueelif(key == "流行元素"):item['popEle'] = valueelif(key == "上市时间"):item['marketTime'] = valueelif(key == "袖型"):item['sleeves_type'] = valueelif(key == "风格"):item['style'] = valueelif(key == "版型"):item['version_type'] = valueelif(key == "厚度"):item['thickness'] = valueelif(key == "衣长"):item['length'] = valueelif(key == "衣门襟"):item['yimenjin'] = valueelif(key == "领型"):item['collar'] = valueelif(key == "图案"):item['pattern'] = valueelse:if((key != "商品名称")):elseInfo = elseInfo+info.encode('utf-8')+'~'item['elseInfo'] = elseInfoitem['title'] = sel.xpath("//div[@id='name']/h1/text()").extract()item['category'] = sel.xpath("//div[@class='breadcrumb']/span[1]/a[2]/text()").extract()item['url'] = mainurlitem['image_urls'] = sel.xpath("//div[@id='preview']/div/img/@src").extract()item['images'] = sel.xpath("//div[@id='product-intro']/div[3]/div[1]/img/@src").extract()r.meta['item'] = itemreturn rdef parsePrice(self,response):sel = Selector(text=response.body)try:price = sel.xpath("//text()").extract()[0].encode('utf-8').split('"')[7]except Exception,ex:print ex;price = 0
#获取parseDetail方法传过来的其他item信息,在此处return itemitem = response.meta['item']item['price'] = price return item
爬虫的文件就是这样了,item里对属性的定义就不用写了。

middrewares文件是使用http代理的,如果你是使用http代理上网,则必须有此文件,我之前没有加,抓取特别慢。

文件内容如下:

class ProxyMiddleware(object):# overwrite process requestdef process_request(self, request, spider):# Set the location of the proxyrequest.meta['proxy'] = "http://***************:port"# 如果有密码,加上下面这些proxy_user_pass = "USERNAME:PASSWORD"# setup basic authentication for the proxyimport base64encoded_user_pass = base64.encodestring(proxy_user_pass)request.headers['Proxy-Authorization'] = 'Basic ' + encoded_user_pass

再来看看pipelines文件的内容:

class JdcrawlPipeline(object):def process_item(self, item, spider):return item
##################下面这些不要也行,要的话就把上面的注释掉吧,下面这些主要是修改相关图片信息时需要的#####################
# import scrapy
# from scrapy.contrib.pipeline.images import ImagesPipeline
# from scrapy.exceptions import DropItem
#
# class MyImagesPipeline(ImagesPipeline):
#
#     def get_media_requests(self, item, info):
#         for image_url in item['image_urls']:
#             yield scrapy.Request(image_url)
#
#     def item_completed(self, results, item, info):
#         image_paths = [x['path'] for ok, x in results if ok]
#         if not image_paths:
#             raise DropItem("Item contains no images")
#         item['image_paths'] = image_paths
#         return item
################################################################

下面是setting文件的内容:

# -*- coding: utf-8 -*-# Scrapy settings for JdCrawl project
#
# For simplicity, this file contains only the most important settings by
# default. All the other settings are documented here:
#
#     http://doc.scrapy.org/en/latest/topics/settings.html
#BOT_NAME = 'JdCoat'SPIDER_MODULES = ['JdCoat.spiders']
NEWSPIDER_MODULE = 'JdCoat.spiders'# Crawl responsibly by identifying yourself (and your website) on the user-agent
#USER_AGENT = 'JdCrawl (+http://www.yourdomain.com)'
USER_AGENT = 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.66 Safari/537.36'
#爬取图片的话必须加上下面这些,如果pipelines文件里的MyImagesPipeline没有的话,就把下面的注释掉的再注释回来,
#再注释掉MyImagesPipeline那一行就可以了,就是必须开启图片管道
ITEM_PIPELINES = {
#'scrapy.contrib.pipeline.images.ImagesPipeline': 1'JdCoat.pipelines.MyImagesPipeline',}
IMAGES_STORE = './jdimage_5/'#宽度优先策略
#SCHEDULER_ORDER = 'BFO'
#http 代理,如果没有代理这就不要了
DOWNLOADER_MIDDLEWARES = {'scrapy.contrib.downloadermiddleware.httpproxy.HttpProxyMiddleware': 110,'JdCoat.middlewares.ProxyMiddleware': 100,
}

基本内容就这些了,接下来直接到工程目录下运行scrapy crawl ***就行了(如果想将爬取结果存到csv,json里,就在这句后面加上-o **.csv(json))。

关于存mysql数据库,也很容易,网上也有。写的不好,还请大家多多指教。

使用scrapy爬取京东产品详细信息相关推荐

  1. java 爬取京东商品详细信息 价格

    java 爬取京东商品详细信息 价格 获取图中的价格,因为京东的价格有反扒机制,价格通过js加载的,直接通过页面标签是获取不到的,所以我们要去要相应的js. http://p.3.cn/prices/ ...

  2. 利用scrapy爬取京东移动端的图片素材和商品信息

    有一个练习项目需要一些带分类信息的商品测试图片,从现有的电商网站爬取是个不错的选择.刚好最近又在练习scrapy的使用,这一篇记录一下用scrapy爬取京东的图片素材并保存商品信息的思路. 文中代码共 ...

  3. Scrapy练习——爬取京东商城商品信息

    刚刚接触爬虫,花了一段时间研究了一下如何使用scrapy,写了一个比较简单的小程序,主要用于爬取京东商城有关进口牛奶页面的商品信息,包括商品的名称,价格,店铺名称,链接,以及评价的一些信息等.简单记录 ...

  4. python基于scrapy爬取京东笔记本电脑数据并进行简单处理和分析

    这篇文章主要介绍了python基于scrapy爬取京东笔记本电脑数据并进行简单处理和分析的实例,帮助大家更好的理解和学习使用python.感兴趣的朋友可以了解下 一.环境准备 python3.8.3 ...

  5. python爬取京东手机数据_用scrapy爬取京东的数据

    本文目的是使用scrapy爬取京东上所有的手机数据,并将数据保存到MongoDB中. 一.项目介绍 主要目标 1.使用scrapy爬取京东上所有的手机数据 2.将爬取的数据存储到MongoDB 环境 ...

  6. 使用scrapy爬取京东的手机数据

     使用scrapy爬取京东的数据 本文目的是使用scrapy爬取京东上所有的手机数据,并将数据保存到MongoDB中 一.项目介绍 主要目标 使用scrapy爬取京东上所有的手机数据 将爬取的数据存储 ...

  7. scrapy爬取京东商品评论并保存至Mysql数据库中

    scrapy爬取京东商品评论并保存至Mysql数据库 一.总体概述 二.实践过程 2.1网页解析 2.2使用单线程爬取代码如下: 2.3使用scrapy爬取数据 2.4绘制词云图结果: 三.总结 一. ...

  8. Scrapy爬取知乎用户信息以及人际拓扑关系

    Scrapy爬取知乎用户信息以及人际拓扑关系 1.生成项目 scrapy提供一个工具来生成项目,生成的项目中预置了一些文件,用户需要在这些文件中添加自己的代码. 打开命令行,执行:scrapy sta ...

  9. 使用scrapy爬取斗鱼直播间信息

    目录 1. 谷歌抓包工具的使用 1.1 打开Chrome开发者工具的方法 1.2 开发者工具的结构 1.3 network模块 2. 使用谷歌抓包工具抓取斗鱼数据 3. 使用scrapy爬取斗鱼直播间 ...

最新文章

  1. Nginx出现“413 Request Entity Too Large”错误解决方法
  2. 大话android 进程通信之AIDL
  3. c++函数不写return可以吗_Science: 高剂量的维生素C可以抗癌吗?
  4. Mozilla的Python3使用情况
  5. springboot日志自定义路径无效及出现org.springframework.boot.context.properties.bind.BindException错误
  6. php oracle 无查询结果,php - Oracle Insert查询不起作用,也不会抛出任何错误 - 堆栈内存溢出...
  7. TextView实现自动滚动滚动.
  8. 浅析数据库设计三范式
  9. 目录浏览器对话框控件 c# 1614822374
  10. 测试人员代码走查基础要点
  11. html弹窗确认取消公告代码,javascript实现确定和取消提示框效果
  12. 51单片机DS18B20(单总线)温度读取
  13. 那些值得我们用心体会的惊艳歌词
  14. win10总是很快自动休眠怎么解决?
  15. 什么是IP?IP为什么要隔离?浏览器如何实现IP隔离?
  16. 【虹科】人工智能和工业相机助力瓶盖质量控制
  17. mybatis-plus生成java代码
  18. 如何阅读数据手册datasheet
  19. 记录video-js出现的一些异常
  20. 股神大家了解多少?深度剖析股神巴菲特

热门文章

  1. 文献精读丨GWAS+TRN多组学方法揭示小麦穗发育调控过程
  2. ❤️Java中经纬度换算❤️
  3. Codeforces 854 D Jury Meeting(前缀和后缀)
  4. Buct oj 1019
  5. vue移动端实现excel在线预览
  6. mysql 怎么同时删除两张表的数据库,mysql怎样删除多个表格数据库数据_数据库
  7. 记录:nodejs 裁切图片的方法
  8. Linux 磁盘管理(RAID)--第五章
  9. python爬考研_Python爬取考研必备单词
  10. 微信小程序全栈开发实践 第三章 微信小程序开发常用的API介绍及使用 -- 3.7 网络接口简介(七)学习EventChannel对象