今天看了看京东的笔记本,,,然后我们就写个爬虫吧,,,,hhhhh

踩点

我们需要商品ID,商铺名,产品名,好评数,中评述,差评数,商品链接,价格

经过我们一通分析,我们发现价格和评论的信息都是保存再文件中,源代码是找不到的。

然后使用咋瓦鲁多。。。可以看看我以前写的方法。。。

我就能发现

我们的价格和评论的信息就在这两个文件中,(中间那个不是啊),我们可以放到json解析网站,解析出来看看

然后就可以根据这两个文件构造url 发送请求,然后提取出我们要的数据,,是不是很简单

至于那些动态增加的数据,看了一下大佬的文章脑部链接,,其实也不难啊,,

https://search.jd.com/s_new.php?keyword=%E7%AC%94%E8%AE%B0%E6%9C%AC&wq=%E7%AC%94%E8%AE%B0%E6%9C%AC&page=2&s=30&scrolling=y&log_id=1589597986209.7166&tpl=1_M&isList=0&show_items=100005171461,100011386554,100010816812,100010879626,100004563443,100010370676,100011177202,100004508927,100006487373,100010370680,100006288375,100011773090,100007539330,100011045982,100006546527,100006460639,100012445728,100011773074,100010409532,100005188613,100006690593,100006743209,100006302835,100012082340,100004915731,5225346,100012039000,100007934914,100003406361,100012481694

这是那些数据的url,其实简化一下就是这东西,,,额,,别被那鬼url吓到就好,,

https://search.jd.com/s_new.php?keyword=%E7%AC%94%E8%AE%B0%E6%9C%AC&wq=%E7%AC%94%E8%AE%B0%E6%9C%AC&page=2&s=30&log_id=1589597986209.7166

然后我比较了一下,有三个变量,page ,s ,log_id(时间戳要是不看人家的还真看不出来。。),,page要是偶数2,4,6.。。想想也是,,s的规律时30,90,150,210.。就是(page-1)*60 。。。。时间戳嘛就是time.time()

爬起来

1.spider

# -*- coding: utf-8 -*-
import scrapy,json,requests,time
from ..items import goodsItem
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36'
}class JdSpiderSpider(scrapy.Spider):name = 'jd_spider'allowed_domains = ['jd.com']start_urls = []for x in range(1,20,2):other_urls = 'https://search.jd.com/s_new.php?keyword=%E7%AC%94%E8%AE%B0%E6%9C%AC&wq=%E7%AC%94%E8%AE%B0%E6%9C%AC&page='+str(x+1)+'&s='+str(x*30)+'&log_id='+str(time.time())start_urls.append(other_urls) # 页面的结构时相同的,下面的语法也适用start_urls.append('https://search.jd.com/Search?keyword=%E7%AC%94%E8%AE%B0%E6%9C%AC&page='+str(x))def parse(self, response):goods = response.xpath(r'//li[@data-sku]')for good in goods:item1 = goodsItem()item1['ID'] = good.xpath(r'./@data-sku').get()item1['name'] = good.xpath('.//div[@class="p-name p-name-type-2"]//em/text()').getall()item1['name'] = ' '.join(item1['name']).strip()item1['shop_name'] = good.xpath('.//a[@class="curr-shop hd-shopname"]/@title').get()item1['link'] = good.xpath('.//div[@class="p-img"]/a/@href').get()item1['shop_id'] = good.xpath('.//div/@data-venid').get()# url = 'http:' + item1['link']url = 'https://club.jd.com/comment/productCommentSummaries.action?referenceIds=' + str(item1['ID'])yield scrapy.Request(url,meta={'item':item1},callback=self.parse_data)# 请求评论文件def parse_data(self,response):item1 = response.meta['item']js = json.loads(response.text)item1['GoodCount'] = str(js['CommentsCount'][0]['GoodCount'])item1['GeneralCount'] = str(js['CommentsCount'][0]['GeneralCount'])item1['PoorCount'] = str(js['CommentsCount'][0]['PoorCount'])num = item1['ID']shop_id = item1['shop_id']# https://c0.3.cn/stock?skuId=100004563443&area=13_1007_37916_0&venderId=1000000904&cat=670,671,672url = "https://c0.3.cn/stock?skuId="+str(num)+"&area=13_1007_37916_0&venderId="+str(shop_id)+"&cat=670,671,672"# print(url)# print('='*30)resp = requests.get(url,headers=headers)js = json.loads(resp.text)item1['price'] = js['stock']['jdPrice']['p']print(resp.url)print('='*50)# https://c0.3.cn/stock?skuId=100010816812&area=13_1007_37916_0&venderId=1000000904&buyNum=1&choseSuitSkuIds=&cat=670,671,672&fqsp=0&pdpin=&pduid=1919946493&ch=1# https://c0.3.cn/stock?skuId=100005171461&area=13_1007_37916_0&venderId=1000000157&buyNum=1&choseSuitSkuIds=&cat=670,671,672&extraParam={%22originid%22:%221%22}&fqsp=0&pdpin=&pduid=1919946493&ch=1&callback=jQuery3127510# yield scrapy.Request(url, meta={'item':item1}, callback=self.parse_price)# 请求价格文件,但是这个请求发不出去,我也不知道为什么return item1# def parse_price(self,response):#     item1 = response.meta['item']#     js = json.loads(response.text)#     item1['price'] = js['stock']['jdPrice']['p']#     print(item1)#     print('*'*50)#     return item1

最后那个请求价格url 函数 parse_price()运行不了,因为yield scrapy.Request(url, meta={'item':item1}, callback=self.parse_price)这个请求发不出去欸,,为什么呢,,如果有朋友知道请告诉我这个彩笔呗。。。。。。

所以就用了感觉比较low 的requests 方法,,不过好用就完了,,,

  1. 我又写了一个爬评论内容的,,不过只能爬单个商品,,毕竟每个商品都有那么多评论,,而且分开也很麻烦不是
import scrapy,json,requests
from ..items import commentItemclass comment_spider(scrapy.Spider):name = "comment_spider"allowed_domains = ['jd.com']ID = '100010816812' # 可以根据商品的ID 来改变start_urls = []for x in range(10):url = 'https://club.jd.com/comment/productPageComments.action?&productId='+str(ID)+'&score=0&sortType=5&page='+str(x)+'&pageSize=10&isShadowSku=0&fold=1'start_urls.append(url)# https://club.jd.com/comment/productPageComments.action?&productId=100010816812&score=0&sortType=5&page=0&pageSize=10&isShadowSku=0&fold=1# https://club.jd.com/comment/productPageComments.action?callback=fetchJSON_comment98&productId=100010816812&score=0&sortType=5&page=5&pageSize=10&isShadowSku=0&rid=0&fold=1# https://club.jd.com/comment/productPageComments.action?callback=fetchJSON_comment98&productId=100010816812&score=0&sortType=5&page=1&pageSize=10&isShadowSku=0&rid=0&fold=1def parse(self, response):js = json.loads(response.text)comment = js['comments']for each in comment:item1 = commentItem()item1['user_id'] = each['id']content = each['content']item1['content'] = ' '.join(content)item1['score'] = each['score']item1['time'] = each['creationTime']yield item1
  1. item
import scrapy
from scrapy import Item,Fieldclass JdItem(scrapy.Item):# define the fields for your item here like:# name = scrapy.Field()passclass goodsItem(Item):link = Field()  # 商品链接ID = Field()  # 商品IDname = Field()  # 商品名字shop_name = Field()  # 店家名字price = Field()  # 价钱shop_id = Field()PoorCount = Field()GeneralCount = Field()GoodCount = Field()class commentItem(Item):content = Field()time = Field()score = Field()user_id = Field()
  1. piplines
from twisted.enterprise import adbapiclass JdPipeline(object):@classmethoddef from_crawler(cls,crawler):mysql_config = crawler.settings['MYSQL_CONFIG']return cls(mysql_config)def __init__(self,mysql_config):self.dbpool = adbapi.ConnectionPool(mysql_config['DRIVER'],host = mysql_config['HOST'],port = mysql_config['PORT'],user = mysql_config['USER'],password = mysql_config['PASSWORD'],db = mysql_config['DATABASE'],charset = 'utf8')def process_item(self, item, spider):result = self.dbpool.runInteraction(self.insert_item,item)result.addErrback(self.insert_error)return itemdef insert_item(self,cursor,item):sql = 'insert into 笔记本(id,code,name,shop_name,price,link,PoorCount,GeneralCount,GoodCount) values(null,%s,%s,%s,%s,%s,%s,%s,%s)'args = (item['ID'],item['name'],item['shop_name'],item['price'],item['link'],item['PoorCount'],item['GeneralCount'],item['GoodCount'])cursor.execute(sql,args)def insert_error(self,failure):print('---出错啦---')print(failure)def close_spider(self, spider):self.dbpool.close()class CommentPipeline(object): # 两个差不多的@classmethoddef from_crawler(cls, crawler):mysql_config = crawler.settings['MYSQL_CONFIG']return cls(mysql_config)def __init__(self, mysql_config):self.dbpool = adbapi.ConnectionPool(mysql_config['DRIVER'],host=mysql_config['HOST'],port=mysql_config['PORT'],user=mysql_config['USER'],password=mysql_config['PASSWORD'],db=mysql_config['DATABASE'],charset='utf8')def process_item(self, item, spider):result = self.dbpool.runInteraction(self.insert_item, item)result.addErrback(self.insert_error)return itemdef insert_item(self, cursor, item):sql = 'insert into 评论数(id,user_id,score,content,time) values(null,%s,%s,%s,%s)'args = (item['user_id'], item['score'], item['content'], item['time'])cursor.execute(sql, args)def insert_error(self, failure):print('---出错啦---')print(failure)def close_spider(self, spider):self.dbpool.close()
  1. settings

BOT_NAME = 'jd'SPIDER_MODULES = ['jd.spiders']
NEWSPIDER_MODULE = 'jd.spiders'MYSQL_CONFIG = {'DRIVER':'pymysql','HOST':'localhost','PORT':3306,'USER':'root','PASSWORD':'54567789','DATABASE':'jd'
}ROBOTSTXT_OBEY = FalseDEFAULT_REQUEST_HEADERS = {'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8','Accept-Language': 'en','referer':'https://search.jd.com/Search?keyword=%E7%AC%94%E8%AE%B0%E6%9C%AC%E7%94%B5%E8%84%91&enc=utf-8&suggest=1.def.0.V17--38s0&wq=bijiben&pvid=bd02d49840994b4586cb4f17e7ed7709',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36'
}DOWNLOADER_MIDDLEWARES = {   # 中间件我就随便换了个请求头,jd好像不会搞这些'jd.middlewares.JdDownloaderMiddleware': 543,
}ITEM_PIPELINES = {# 'jd.pipelines.JdPipeline': 300,'jd.pipelines.CommentPipeline':300   # 要爬评论就用这个
}



然后比较了一下加上动态加上的那部分数据,十页334条?????比不加的211条是多了一些,,,但是不应该是两倍嘛????这是为撒呢。。。。。。

而且这么多数据有什么用呢。。。。。。

scrapy案例:爬取京东笔记本数据相关推荐

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

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

  2. Java爬取京东商品数据

    爬取京东商品数据 我把项目部署到了linux中,进行爬取,爬到了3000条手机信息,只是爬了一些简单的文本信息. 本文爬取的数据为京东手机信息 准备工作 导入爬取数据需要的依赖包 编写httpClie ...

  3. Python爬取京东商品数据

    一.前言 由于京东反爬技术较强,使用常规方法爬取其数据行不通,且使用逆向分析技术又具有一定难度,所以本文将直接使用selenium爬取京东商品数据.若不知道怎么安装和配置selenium,请点击查阅笔 ...

  4. Selenium实战之Python+Selenium爬取京东商品数据

    实战目标:爬取京东商品信息,包括商品的标题.链接.价格.评价数量. 代码核心在于这几个部分: 其一:使用元素定位来获取页面上指定需要抓取的关键字: 其二:将页面上定位得到的数据永久存储到本地文件中. ...

  5. Java实现爬取京东手机数据

    Java实现爬取京东手机数据 最近看了某马的Java爬虫视频,看完后自己上手操作了下,基本达到了爬数据的要求,HTML页面源码也刚好复习了下,之前发布两篇关于简单爬虫的文章,也刚好用得上.项目没什么太 ...

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

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

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

    京东爬虫 一.环境准备 二.问题分析 三.spider 三.item 四.setting 五.pipelines 六.middlewares 七.使用jupyter进行简单的处理和分析 一.环境准备 ...

  8. java爬虫案例——SpringBoot使用HttpClient、Jsoup爬取京东手机数据

    文章目录 前言 一.准备工作 二.项目文件 1.项目依赖 2.项目配置文件 3.pojo 4.dao接口 5.service接口及其实现类 6.HttpClient封装工具类 7.爬取任务实现 8.启 ...

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

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

最新文章

  1. python使用matplotlib可视化、为可视化图像添加标题(title)、自定义标题的字体格式、字体大小、字体颜色等
  2. lombok不生效问题(持续补充)
  3. 登录时记住用户名和密码及cookie案例应用
  4. linux 描述符 打开 个数,Linux下增大可打开文件描述符的最大数的方法
  5. 编译原理算符分析器实现 -* c语言代码,编译原理论文-词法分析器的设计与实现...
  6. UOS 安装nvidia官方显卡驱动
  7. WPS如何隔列填充背景颜色
  8. u盘如何安装xp和linux,怎样从U盘安装Windows XP?
  9. 醉逍遥显示无法更新服务器,蜀门醉逍遥版本修改教程 (值好几千,俺心血).doc
  10. 大点干!早点散----------深入剖析LVS负载均衡群集原理
  11. 恶意程序利用Linksys路由器漏洞在路由器中传播
  12. 1024Studio官网
  13. python3 时区 时间戳 指定输入时间为东八区时间、北京时间
  14. 不可思议:99%的人不了解的真实中国历史
  15. 低调,中国的FPGA到底有多强?
  16. windows下ping特定端口
  17. 除法的向上取整和向下取整
  18. android 信号研究(包括信号图标和信号优化)
  19. 【前端开发】Vue + Fabric.js + Element-plus 实现简易的H5可视化图片编辑器
  20. Unity 将Sprite打包进图集

热门文章

  1. java 等待线程池结束_等待线程池中任务执行完毕做优雅关闭
  2. 根据银行卡号判断是哪个银行
  3. 【SQL 中级语法 2】自连接的用法
  4. java定义一个Person类
  5. Android大话设计模式 第三章----开放封闭原则---孙悟空任弼马温一职
  6. 输入一段英文句子,单词之间用若干空格隔开,将每个单词的首字母转换为大写字母。 例如,“I am very glad to see you”的转换结果为“I Am Very Glad To See Yo
  7. Python计算机视觉编程(二)---SIFT、Harris特征
  8. dbeaver针对某张表写sql(复制软件sql模板)
  9. Web前端开发 北京林业大学 CSS样式-单元作业
  10. FreeRTOS学习记录(四):任务、任务切换(难点)