返回顶部
首页 > 资讯 > 后端开发 > Python >利用 scrapy-splash 对京东
  • 664
分享到

利用 scrapy-splash 对京东

京东scrapysplash 2023-01-31 00:01:21 664人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

本人是第一次写博客,有写得不好的地方欢迎值出来,大家一起进步! scrapy-splash的介绍 scrapy-splash模块主要使用了Splash. 所谓的Splash, 就是一个javascript渲染服务。它是一个实现了Http

本人是第一次写博客,有写得不好的地方欢迎值出来,大家一起进步!

scrapy-splash的介绍

scrapy-splash模块主要使用了Splash. 所谓的Splash, 就是一个javascript渲染服务。它是一个实现了Http api的轻量级浏览器,Splash是用python实现的,同时使用Twisted和Qt。Twisted(QT)用来让服务具有异步处理能力,以发挥WEBkit的并发能力。Splash的特点如下:

  • 并行处理多个网页
  • 得到html结果以及(或者)渲染成图片
  • 关掉加载图片或使用 Adblock Plus规则使得渲染速度更快
  • 使用JavaScript处理网页内容
  • 使用lua脚本
  • 能在Splash-Jupyter Notebooks中开发Splash Lua scripts
  • 能够获得具体的HAR格式的渲染信息

参考文档:https://www.cnblogs.com/jclian91/p/8590617.html

准备配置

页面分析

首先进入https://search.jd.com/ 网站搜索想要的书籍, 这里以 python3.7 书籍为例子。

 

点击搜索后发现京东是通过 js 来加载书籍数据的, 通过下来鼠标可以发现加载了更多的书籍数据(数据也可以通过京东的api来获取)

 

首先是模拟搜索,通过检查可得:

 

然后是模拟下拉,这里选择页面底部的这个元素作为模拟元素:

 

开始爬取

模拟点击的lua脚本并获取页数:

 1 function main(splash, args)
 2   splash.images_enabled = false
 3   splash:set_user_agent('Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36')
 4   assert(splash:Go(args.url))
 5   splash:wait(0.5)
 6   local input = splash:select("#keyWord")
 7   input:send_text('Python3.7')
 8   splash:wait(0.5)
 9   local fORM = splash:select('.input_submit')
10   form:click()
11   splash:wait(2)
12   splash:runjs("document.getElementsByClassName('bottom-search')[0].scrollIntoView(true)")
13   splash:wait(6)
14   return splash:html()
15 end
View Code

 

同上有模拟下拉的代码:

1 function main(splash, args)
2   splash.images_enabled = false
3   splash:set_user_agent('Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.67 Safari/537.36')
4   assert(splash:go(args.url))
5   splash:wait(2)
6   splash:runjs("document.getElementsByClassName('bottom-search')[0].scrollIntoView(true)")
7   splash:wait(6)
8   return splash:html()
9 end
View Code

 

选择你想要获取的元素,通过检查获得。附上源码

 

 

 1 # -*- coding: utf-8 -*-
 2 import scrapy
 3 from scrapy import Request
 4 from scrapy_splash import SplashRequest
 5 from ..items import JdsplashItem
 6 
 7 
 8 
 9 lua_script = '''
10 function main(splash, args)
11   splash.images_enabled = false
12   splash:set_user_agent('Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36')
13   assert(splash:go(args.url))
14   splash:wait(0.5)
15   local input = splash:select("#keyword")
16   input:send_text('python3.7')
17   splash:wait(0.5)
18   local form = splash:select('.input_submit')
19   form:click()
20   splash:wait(2)
21   splash:runjs("document.getElementsByClassName('bottom-search')[0].scrollIntoView(true)")
22   splash:wait(6)
23   return splash:html()
24 end
25 '''
26 
27 lua_script2 = '''
28 function main(splash, args)
29   splash.images_enabled = false
30   splash:set_user_agent('Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.67 Safari/537.36')
31   assert(splash:go(args.url))
32   splash:wait(2)
33   splash:runjs("document.getElementsByClassName('bottom-search')[0].scrollIntoView(true)")
34   splash:wait(6)
35   return splash:html()
36 end
37 '''
38 
39 class JdBookSpider(scrapy.Spider):
40     name = 'jd'
41     allowed_domains = ['search.jd.com']
42     start_urls = ['https://search.jd.com']
43 
44     def start_requests(self):
45         #进入搜索页进行搜索
46         for each in self.start_urls:
47             yield SplashRequest(each,callback=self.parse,endpoint='execute',
48                 args={'lua_source': lua_script})
49 
50     def parse(self, response):
51         item = JdsplashItem()
52         price = response.CSS('div.gl-i-wrap div.p-price i::text').getall()
53         page_num = response.xpath("//span[@class= 'p-num']/a[last()-1]/text()").get()
54         #这里使用了 xpath 函数 fn:string(arg):返回参数的字符串值。参数可以是数字、逻辑值或节点集。
55         #可能这就是 xpath 比 css 更精致的地方吧
56         name = response.css('div.gl-i-wrap div.p-name').xpath('string(.//em)').getall()
57         #comment = response.css('div.gl-i-wrap div.p-commit').xpath('string(.//strong)').getall()
58         comment = response.css('div.gl-i-wrap div.p-commit strong a::text').getall()
59         publishstore = response.css('div.gl-i-wrap div.p-shopnum a::attr(title)').getall()
60         href = [response.urljoin(i) for i in response.css('div.gl-i-wrap div.p-img a::attr(href)').getall()]
61         for each in zip(name, price, comment, publishstore,href):
62             item['name'] = each[0]
63             item['price'] = each[1]
64             item['comment'] = each[2]
65             item['p_store'] = each[3]
66             item['href'] = each[4]
67             yield item
68         #这里从第二页开始
69         url = 'https://search.jd.com/Search?keyword=python3.7&enc=utf-8&qrst=1&rt=1&stop=1&vt=2&page=%d&s=%d&click=0'
70         for each_page in range(1,int(page_num)):
71             yield SplashRequest(url%(each_page*2+1,each_page*60),callback=self.s_parse,endpoint='execute',
72                 args={'lua_source': lua_script2})
73 
74     def s_parse(self, response):
75         item = JdsplashItem()
76         price = response.css('div.gl-i-wrap div.p-price i::text').getall()
77         name = response.css('div.gl-i-wrap div.p-name').xpath('string(.//em)').getall()
78         comment = response.css('div.gl-i-wrap div.p-commit strong a::text').getall()
79         publishstore = response.css('div.gl-i-wrap div.p-shopnum a::attr(title)').getall()
80         href = [response.urljoin(i) for i in response.css('div.gl-i-wrap div.p-img a::attr(href)').getall()]
81         for each in zip(name, price, comment, publishstore, href):
82             item['name'] = each[0]
83             item['price'] = each[1]
84             item['comment'] = each[2]
85             item['p_store'] = each[3]
86             item['href'] = each[4]
87             yield item
View Code

 

各个文件的配置:

items.py :

 1 import scrapy
 2 
 3 
 4 class JdsplashItem(scrapy.Item):
 5     # define the fields for your item here like:
 6     # name = scrapy.Field()
 7     name = scrapy.Field()
 8     price = scrapy.Field()
 9     p_store = scrapy.Field()
10     comment = scrapy.Field()
11     href = scrapy.Field()
12     pass

settings.py:

1 import scrapy_splash
2 # Splash服务器地址
3 SPLASH_URL = 'http://192.168.99.100:8050'
4 # 开启Splash的两个下载中间件并调整HttpCompressionMiddleware的次序
5 DOWNLOADER_MIDDLEWARES = {
6 'scrapy_splash.SplashCookiesMiddleware': 723,
7 'scrapy_splash.SplashMiddleware': 725,
8 'scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware': 810,
9 }

 

最后运行代码,可以看到书籍数据已经被爬取了:

 

--结束END--

本文标题: 利用 scrapy-splash 对京东

本文链接: https://lsjlt.com/news/182739.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 利用 scrapy-splash 对京东
    本人是第一次写博客,有写得不好的地方欢迎值出来,大家一起进步! scrapy-splash的介绍 scrapy-splash模块主要使用了Splash. 所谓的Splash, 就是一个Javascript渲染服务。它是一个实现了HTTP ...
    99+
    2023-01-31
    京东 scrapy splash
  • 如何使用scrapy-splash
    这篇文章主要介绍了如何使用scrapy-splash,编程网小编觉得不错,现在分享给大家,也给大家做个参考,一起跟随编程网小编来看看吧!1.scrapy_splash是scrapy的一个组件scrapy_splash加载js数据基于Spla...
    99+
    2023-06-06
  • PHP对京东联盟CPS的API调用
    在调用接口之前,先要取得授权,这个看看接口文档就可以了。地址如下:https://jos.jd.com/doc/channel.htmid=152 在京东云控制台:https://c...
    99+
    2024-04-02
  • Scrapy抓取京东商品、豆瓣电影及代码分享
     1.scrapy基本了解   Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架。可以应用在包括数据挖掘, 信息处理或存储历史数据等一系列的程序中。其最初是为了页面抓取(更确切来说,网络抓...
    99+
    2022-06-04
    豆瓣 京东 代码
  • 利用JavaScript实现仿京东放大镜效果
    功能实现 1、鼠标经过小图片盒子,黄色的遮挡层和大图片显示,离开时就隐藏2个盒子功能 2、黄色遮挡层跟着鼠标走 把鼠标的坐标给盒子,不断地进行赋值操作 把鼠标地坐标给遮挡层不合适,因...
    99+
    2024-04-02
  • python爬虫框架scrapy实战之爬取京东商城进阶篇
    前言 之前的一篇文章已经讲过怎样获取链接,怎样获得参数了,详情请看python爬取京东商城普通篇,本文将详细介绍利用python爬虫框架scrapy如何爬取京东商城,下面话不多说了,来看看详细的介绍吧。 ...
    99+
    2022-06-04
    爬虫 实战 框架
  • 利用JavaScript模拟京东快递单号查询效果
    1、上面放大框开始是隐藏的,当输入单号后,就显示,并且里面的内容是输入框的内容的字体的放大 <!DOCTYPE html> <html lang="en">...
    99+
    2024-04-02
  • 如何利用JavaScript实现仿京东放大镜效果
    这篇文章主要介绍如何利用JavaScript实现仿京东放大镜效果,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!功能实现鼠标经过小图片盒子,黄色的遮挡层和大图片显示,离开时就隐藏2个盒子功能黄色遮挡层跟着鼠标走把鼠标的...
    99+
    2023-06-29
  • 京东云服务器租用
    京东云服务器租用可以提供更好的性能、可靠性和安全性,以满足您的业务需求。以下是一些选择京东云服务器租用的理由: 提高性能和可靠性 使用京东云服务器租用,您可以选择多台服务器组成一个集群,共同承担业务负载。这样可以减少单点故障的影响,从...
    99+
    2023-10-26
    京东 服务器
  • 京东云服务器有人用么
    京东云服务器是京东自主研发的云计算服务,因此在使用上可能会受到一些限制和影响。 一些云服务器提供商可能会限制某些服务的使用或使用的权限。如果您正在使用京东云服务器,建议您查询该服务提供商的官方网站或联系该服务提供商的客户支持人员以了解有关...
    99+
    2023-10-26
    有人用 京东 服务器
  • 京东云服务器怎么使用
    京东云服务器是京东云的核心业务之一,它提供了强大的云计算服务,可以帮助企业快速构建和管理云应用程序、数据库、中间件、安全、容器服务等。 下面是使用京东云服务器的一般流程: 登录京东云服务器,并注册京东账号。 下载并安装京东云服务器的软件...
    99+
    2023-10-26
    京东 服务器
  • 京东云服务器租用流程
    京东云服务器租用的步骤如下: 选择云服务器提供商:京东云服务器提供商有很多,不同的云服务器提供商有不同的服务器价格和服务,客户需要先了解服务商的具体情况,选择一个最适合自己需求的服务器。 选择合适的云服务器类型:选择京东云服务器提供商的...
    99+
    2023-10-27
    京东 流程 服务器
  • 阿里云与京东服务器价格对比分析
    本文将对阿里云和京东服务器的价格进行比较分析,旨在帮助读者了解这两家云服务提供商在服务器价格方面的差异,并提供一些参考建议。详细说明:阿里云服务器价格阿里云是国内领先的云计算服务提供商之一,其服务器价格相对较为合理。根据阿里云官方网站提供...
    99+
    2023-12-27
    阿里 京东 服务器
  • 京东云服务器租用价格表
    1. 京东云服务器租用价格表 如果你正在寻找可靠的云服务器提供商,那么京东云是一个不错的选择。京东云提供了多种不同类型的云服务器,以满足不同客户的需求。以下是京东云服务器租用价格表: 1.1 通用型云服务器 1核2G 40GB SSD:...
    99+
    2023-10-26
    价格表 京东 服务器
  • 京东云服务器租用多少钱
    京东云服务器租用费用取决于你选择的云主机服务商和云存储服务提供商。一些云计算服务提供商的价格可能会高一些,但也会提供相应的安全措施和支持,具体的租用费用可能会根据不同的服务进行调整。 如果你的预算有限,可以考虑使用价格相对较低的云计算服务...
    99+
    2023-10-26
    多少钱 京东 服务器
  • python基于scrapy爬取京东笔记本电脑数据并进行简单处理和分析
    目录一、环境准备二、问题分析三、spider四、item五、setting六、pipelines七、middlewares八、使用jupyter进行简单的处理和分析一、环境准备 ...
    99+
    2024-04-02
  • 怎么用JavaScript实现京东秒杀效果
    本篇内容介绍了“怎么用JavaScript实现京东秒杀效果”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! 首先先利用html和cs...
    99+
    2023-06-25
  • 怎么用JavaScript仿京东放大镜效果
    本篇内容介绍了“怎么用JavaScript仿京东放大镜效果”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!具体内容如下案例分析整个案例可以分为...
    99+
    2023-06-25
  • 怎么用Android实现京东秒杀功能
    这篇“怎么用Android实现京东秒杀功能”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“怎么用Android实现京东秒杀功能...
    99+
    2023-06-29
  • 京东上传不能用JavaScript怎么解决
    随着互联网的飞速发展,电商平台已经成为人们购物的首选之一。京东作为国内最大的在线零售商之一,一直以来都致力于提供更优质、更便捷、更安全的购物体验。然而,最近不少用户反映,在京东上传照片等操作时,无法使用JavaScript,导致上传图片等功...
    99+
    2023-05-14
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作