python工具箱查询手册书籍京东_十二. 项目实战:爬取京东商城中的书籍信息

爬取网址:https://search.jd.com/Search?keyword=python

爬取信息:书名,价格,出版社,日期

爬取方式:scrapy框架 + splash

存储方式:csv

页面如下,可以看到python相关的图书超过6000本。

不过最终只能看到100页,也就是6000本的信息。

京东图书每个页面有60本图书,页面打开时首先只加载30本书,通过滚动条的下拉,动态加载后面的30本书。所以我们要执行一下JavaScript代码使页面滚动到页面底部把剩余的30本书加载出来。

翻页位于页面的底部,可以定位翻页部分然后用scrollIntoView(true)实现拖拽显示翻页部分,或使用window.scroll("起始点“,“结束点”)来实现页面的滚动加载。

翻页规律:第一页是page=1,动态加载部分是page2,第二页是page3,动态加载部分是page4。由于动态加载部分由splash完成,对于翻页来说就是1,3,5向上叠加即可。

spider的代码为:

# -*- coding: utf-8 -*-

import scrapy

from scrapy_splash import SplashRequest

lua_script = '''

function main(splash)

splash:go(splash.args.url) --打开页面

splash:wait(2) --等待加载

splash:runjs("document.getElementsByClassName('page')[0].scrollIntoView(true)") --运行js代码

splash:wait(2) --等待加载

return splash:html() --返回页面数据

end

'''

class JdPythonSpider(scrapy.Spider):

name = 'jd_python'

allowed_domains = ['jd.com']

keyword = "python" #填关键字

base_urls = 'https://search.jd.com/Search?keyword={}&enc=utf-8'.format(keyword)

##重写start request方法,指向parse_urls

def start_requests(self):

yield scrapy.Request(self.base_urls,callback=self.parse_urls)

def parse_urls(self,response):

pageNum = response.xpath('//span[@class="fp-text"]/i/text()').extract_first()

# 构造每页的url,向Splash的execute端点发送请求

for i in range(pageNum):

url = "{}page={}".format(self.base_urls,i*2+1)

yield SplashRequest(url,endpoint="execute",args={"lua_source",lua_script},cache_args=['lua_source'],callback=self.parse)

def parse(self, response):

# 获取一个页面中每本书的名字和价格等

for sel in response.css('ul.gl-warp.clearfix > li.gl-item'):

yield {

'name': sel.css('div.p-name').xpath('string(.//em)').extract_first(),

'price': sel.css('div.p-price i::text').extract_first(),

'press': sel.css('span.p-bi-store a::text').extract_first(),

'date': sel.css('span.p-bi-date::text').extract_first(),

}

settings.py中添加以下信息:

SPLASH_URL = 'http://192.168.99.100:8050' #splash服务地址

#开启scrapy_splash的两个下载中间件,并调整HttpCompressionMiddleware的次序

DOWNLOADER_MIDDLEWARES = {

'scrapy_splash.SplashCookiesMiddleware': 723,

'scrapy_splash.SplashMiddleware':725,

'scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware':810,

}

#设置去重过滤器

DUPEFILTER_CLASS = 'scrapy_splash.SplashAwareDupeFilter'

#支持cache_args(可选)

SPIDER_MIDDLEWARES = {

'scrapy_splash.SplashDeduplicateArgsMiddleware': 100,

}

USER_AGENT ='Mozilla/5.0 (Windows NT 10.0; WOW64) \

AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3294.6 Safari/537.36'

ROBOTSTXT_OBEY = False

DOWNLOAD_DELAY = 3

在cmd运行:scrapy crawl jd_python -o books.csv

结果为:

注:结果对data进行了降序排序。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/489430.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android Binder 系统学习笔记(一)Binder系统的基本使用方法

1.什么是RPC(远程过程调用) Binder系统的目的是实现远程过程调用(RPC),即进程A去调用进程B的某个函数,它是在进程间通信(IPC)的基础上实现的。RPC的一个应用场景如下: A进…

mongodb 监听不到端口_干货|MongoDB简单操作和通过python进行操作

点击上方“AI遇见机器学习”,选择“星标”公众号重磅干货,第一时间送达这次我们主要来简单的讨论一下在MongoDB中如何更新数据(修改数据),删除数据,以及如何通过Python调用MongoDB。一、简单使用MongoDB操作数据| a.更新数据| i.数…

人工智能+脑机接口:让我们距离“增强人类”越来越近

来源:资本实验室前段时间,一则新闻引发了广泛争议:国内一所小学利用头环来监控孩子的脑电波,以判断孩子上课是否走神。暂且不论该事件是否是一场打着高科技幌子的闹剧,头环本身所代表的脑机接口技术正在受到越来越多的…

oracle常见单词_Oracle中常见的英语单词

fatal:重要的,致命的。常见于[rootdido1 ~]# ps -ef|grep init.cssdroot 2918 1 0 09:59? 00:00:00 /bin/sh /etc/init.d/init.cssd fatal-------------------------dependencies:附属的diagnostic:诊断常见于[rootdido1 client]…

哲学的未来

来源:哲学园作者:约翰R塞尔译者:GTY约翰塞尔生于1932年,当代著名哲学家,现为美国加州大学伯克利分校Slusser哲学教授,在语言哲学、心灵哲学和社会哲学领域贡献巨大,是目前在世的最著名的分析哲学…

怎么知道wx.config执行成功没_作为一个减肥40斤,且10年没反弹的普通人,这份瘦身经验分享给你...

“减肥”是女生老生常谈的话题,但是“减肥失败”、“越减越肥”也是很多女生面临的常态。所以做为成功减肥40斤且10多年没有反弹的人,我想来给大家一些自己的经验。很多姑娘知道减肥的关键因素是“热量差”,无论是增加运动,还是减…

nodejs 笔记

安装环境----------------------------------------------------------------1,安装nodejs 起步----------------------------------------------------------------1,cd 进目录2,npm init3,安装模块browsersync模块 #npm install browser-syncbrowser-sync start --server --…

html代码type,HTML中type是什么意思

在HTML中,type是类型的意思,是一个标签属性,主要用于定义标签元素的类型或文档(脚本)的MIME类型;例在input标签中type属性可以规定input元素的类型,在script标签中type属性可以规定脚本的MIME类型。推荐:ht…

以图搜图 图像匹配_图像匹配,基于深度学习DenseNet实现以图搜图功能

原标题:图像匹配,基于深度学习DenseNet实现以图搜图功能度学习的发展使得在此之前以机器学习为主流算法的相关实现变得简单,而且准确率更高,效果更好,在图像检索这一块儿,目前有谷歌的以图搜图,…

bzoj1085骑士精神(搜索)

1085: [SCOI2005]骑士精神 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1893 Solved: 1051Description 在一个55的棋盘上有12个白色的骑士和12个黑色的骑士, 且有一个空位。在任何时候一个骑士都能按照骑士的走法(它可以走到和它横坐标相差为1&am…

中国2项上榜:《时代周刊》2019年度100大最佳发明榜单发布!

来源:Time导读:《时代周刊》最新评选出2019年度100大最佳发明!这100项突破性的发明改变了我们的生活、工作、娱乐和思考方式,它们让世界变得更美好,更智能,或更有趣。今天分享其中的20个极具未来感的产品。…

html异形轮播,异形滚动

异形滚动效果图.gif1、原理的揭示前言:图片大小处理问题的解决,当我们只改变盒子大小,图片会溢出,无法充满这个盒子。设置图片的宽高为 100%异形滚动.box {width: 100px;height: 100px;}img { //让图片充满整个盒子width: 100%;he…

python如何判断列表是否为空_Python中如何检查字符串/列表是否为空

本文最后更新于2018年5月5日,已超过 1 年没有更新,如果文章内容失效,还请反馈给我,谢谢! Start 缘由: 整理、记录、备忘 正文: 参考解答: 从dict中取值时,一定要使用.get…

使用 jq 处理 json 文件的最佳实践

使用 jq 格式化 json 文本后再存入 json 文件&#xff0c;但不回显 json 内容 jq . << EOF > example.json [{"Classification": "hdfs-site","Properties": {"dfs.replication": "1"} }] EOF cat example.json使…

oracle19c 安装权限_Oracle19c 安装及SQL developer连接

因为偶然要用到Oracle数据库&#xff0c;而平常工作中用的都是mySQL的&#xff0c;所以电脑上安装的都是MySQL的相关服务&#xff0c;今天用到Oracle本地没有&#xff0c;所以自己安装了一个&#xff0c;但是因为不熟悉&#xff0c;安装遇到了很多的坑&#xff0c;因此记录一下…

【周末阅读】工业互联网的发展历程及实现路径

来源&#xff1a;青岛智能产业技术研究院【导读】目前&#xff0c;我国工业互联网发展迅猛&#xff0c;从国家层面、部委层面、地方层面都在积极推动&#xff0c;国际上对工业互联网发展也比较关注。我主要介绍工业互联网的三个方面内容&#xff1a;工业互联网的基本认识、国内…

三菱fx5u编程手册_FX5U系列PLC控制伺服3种方式

FX5U系列PLC为三菱目前最新的小型PLC&#xff0c;机身小巧却功能强大&#xff0c;不仅保留了三菱小型PLC已有的优点&#xff0c;还吸收了大型PLC的开发理念&#xff0c;在整体性能上得到了很大的提高。本文以FX5U在控制伺服的性能上做个总结&#xff0c;归纳下FX5U控制伺服的3种…

[转人工智能工程师学习路线及具备的5项基本技能

原文地址&#xff1a;http://blog.csdn.net/BaiHuaXiu123/article/details/52478853 摘要 学习路线 你是否对机器学习充满兴趣呢?其实到目前为止&#xff0c;每天有越来越多的工程师开始将好奇的目光转向机器学习领域。实际上&#xff0c;你会发现现在没有哪一个领域比机器学习…

mesh渲染到ui_在Unity中使用UGUI修改Mesh绘制几何图形

Used by Text, Image, and RawImage for example to generate vertices specific to their use case.说的是当该控件(例如Text,Image,RawImage)需要改变顶点的时候&#xff0c;就会自动调用。在传入的vh参数里修改顶点&#xff0c;三角形&#xff0c;UV等&#xff0c;同样可以达…

python牛顿迭代公式_python计算牛顿迭代多项式实例分析

本文实例讲述了python计算牛顿迭代多项式的方法。分享给大家供大家参考。具体实现方法如下&#xff1a;p evalPoly(a,xData,x). Evaluates Newtons polynomial p at x. The coefficient vector a can be computed by the function coeffts. a coeffts(xData,yData). Computes…