Python爬虫淘宝商品详情页价格、类似数据

  在讲爬取淘宝详情页数据之前,先来介绍一款 Chrome 插件:Toggle JavaScript (它可以选择让网页是否显示 js 动态加载的内容),如下图所示:

这里写图片描述

当这个插件处于关闭状态时,待爬取的页面显示的数据如下:

这里写图片描述

当这个插件处于打开状态时,待爬取的页面显示的数据如下:

这里写图片描述

  可以看到,页面上很多数据都不显示了,比如商品价格变成了划线价格,而且累计评论也变成了0,说明这些数据都是动态加载的,以下演示真实价格的找法(评论内容找法类似),首先检查页面元素,然后点击Network选项卡,刷新页面,可以看到很多动态加载的数据,在里面找到包含商品价格的链接(可以使用Ctrl+f查找),如下图所示:

这里写图片描述

  将此链接在新的标签页打开,如下图所示,可以看到,被禁止访问了,所以爬取的时候要在headers中加上Referer字段告诉服务器你是从哪个页面链接过来的,Referer字段可以在这里查看:

这里写图片描述
评论数据的链接可以直接访问(和价格信息找法类似),这里我知己去访问它,如下图所示:

这里写图片描述

  可以看到评论信息总共有7页,而且都是json格式的数据,所以可以用json反序列化去抽取数据,当然也可以用正则表达式,下面我将演示用正则去抽取数据,因为评论数据过多,这里只抓取第一页,如果需要所有评论数据,可以循环构造url,只需要修改currentPage参数的值就行。程序源码如下:

# filename:spider_taobao.py
#!/usr/bin/env python
# -*- coding=utf-8 -*-import re
import urllib2def spider_taobao(url):headers = {'Accept':'application/json, text/plain, */*','Accept-Language':'zh-CN,zh;q=0.3','Referer':'https://item.taobao.com/item.htm','User-Agent':'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36','Connection':'keep-alive',}goods_id = re.findall('id=(\d+)', url)[0]try:req = urllib2.Request(url=url, headers=headers)res = urllib2.urlopen(req).read().decode('gbk', 'ignore')except Exception as e:print '无法打开网页:', e.reasontry:title = re.findall('<h3 class="tb-main-title" data-title="(.*?)"', res)title = title[0] if title else Noneline_price = re.findall('<em class="tb-rmb-num">(.*?)</em>', res)[0]# 30-42行为抓取淘宝商品真实价格,该数据是动态加载的purl = "https://detailskip.taobao.com/service/getData/1/p1/item/detail/sib.htm?itemId={}&modules=price,xmpPromotion".format(goods_id)price_req = urllib2.Request(url=purl, headers=headers)price_res = urllib2.urlopen(price_req).read()data = list(set(re.findall('"price":"(.*?)"', price_res)))# data列表中的价格可能是定值与区间的组合,也可能只是定值,而且不一定有序real_price = ""for t in data:if '-' in t:real_price = tbreakif not real_price:real_price = sorted(map(float, data))[0]# 45-53行为抓取评论数据,该数据也是动态加载的comment_url = "https://rate.tmall.com/list_detail_rate.htm?itemId={}&sellerId=880734502&currentPage=1".format(goods_id)comment_data = urllib2.urlopen(comment_url).read().decode("GBK", "ignore")temp_data = re.findall('("commentTime":.*?),"days"', comment_data)temp_data = temp_data if temp_data else re.findall('("rateContent":.*?),"reply"', comment_data)comment = ""for data in temp_data:comment += data.encode('utf-8')comment = comment if comment else "暂无评论"except Exception as e:print '数据抽取失败!!!'print '商品名:', titleprint '划线价格:', line_priceprint '真实价格:', real_priceprint '商品链接:', urlprint '部分评论内容:', commentif __name__ == '__main__':#url = 'https://item.taobao.com/item.htm?spm=a230r.1.14.30.43306a3fOeuZ0B&id=553787375606&ns=1&abbucket=10#detail'url = raw_input("请输入商品链接: ")spider_taobao(url)

运行结果如下:

这里写图片描述

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

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

相关文章

js提取正则中的字符串

代码如下&#xff1a; var results data.match(/(start).*?()/);if (results ! null){console.log(data[0]);}

微信公众号开发(—)接口与服务器关联

微信公众号开发(—) 以下都是借鉴的微信公众平台的文档加老师指点和自行的理解。 1.一台有微信的手机.(别问我老人机可以不 有微信就可以&#xff01;&#xff01;&#xff01;) 2.需要有一个微信公众平台的测试号&#xff08;订阅号,服务号也可以按自己需求来&#xff09;. 3.…

让zabbix图像中文不再是乱码

默认的&#xff0c;如果想要给zabbix的图像起个中文名&#xff0c;那么当你兴致勃勃的看图像时&#xff0c;会发现中文的地方都是乱码。怎么办呢&#xff1f;首先&#xff0c;从你的windows机器的控制面板—字体中选择一个中文字符集&#xff0c;然后上传至zabbix服务器的wwwro…

nodejs支持ssi实现include shtml页面

express 对于include的代码默认不处理&#xff0c;直接输出&#xff0c;没办法执行include的内容&#xff0c;但可以通过Nginx实现。 1、 配置nginx设置开启ssi模式。 server {…ssi on;ssi_silent_errors on;ssi_types text/shtml;… 2、添加include页面 <!--# include vi…

Windows PC软件反编译逆向破解

文章目录 一.OllyDbg工具简介二.OllyDbg分析Crakeme示例1三.OllyDbg分析Crakeme示例2四.总结作者的github资源&#xff1a; 系统安全&#xff1a;https://github.com/eastmountyxz/SystemSecurity-ReverseAnalysis网络安全&#xff1a;https://github.com/eastmountyxz/Networ…

微信公众号天气与聊天机器人小功能

微信公众号小功能 以下都是借鉴的微信公众平台的文档加老师指点和自行的理解。 &#xff08;1&#xff09;微信公众号发送地区回复现在和未来五天天气情况 &#xff08;2&#xff09;发送语音和智能机器人聊天 一、调用天气预报接口 实现微信公众号发送地区回复现在和未来五天…

如何实现:判断数据库中某表是否有记录,若为空,则插入一条记录。若不为空则查询某记录...

select count(*) as num1 from tableif num1 0insert into ...elseselect * from table.... SQL的过程如下&#xff1a;Select top 1 * from tableif rowcount>0 --上一次影响条数 insert into Table --插入语句else Select * from Table --查询转载于:https:/…

安卓app逆向破解脱壳教程

From&#xff1a;Hook 神器家族的 Frida 工具使用详解&#xff1a;https://blog.csdn.net/FlyPigYe/article/details/90258758 详解 Hook 框架 frida ( 信抢红包 )&#xff1a;https://www.freebuf.com/company-information/180480.html APP逆向神器之Frida【Android初级篇】…

nodejs生成多层目录和生成文件的通用方法

/***生成多层目录* param dir 多层目录* param split 分隔符&#xff0c;ex:/ 对应的目录地址:2015/10/10* param mode 目录权限&#xff08;读写权限&#xff09;&#xff0c;默认0777* param callback*/var createDirsSync function (dir, split, mode, callback) {console.…

关注微信公众号使其自动发送欢迎你关注消息

关注微信公众号使其自动发送欢迎你关注消息 一般我们关注微信公众号时。他都会自动推送一条消息。欢迎您关注了某公众号。而今天我们所做的就是这个功能。 关注公众号时我们需要获取到用户的一些个人基本信息。 而获取基本信息就要看他的运行原理。到底是怎么运行。 当我们申请…

微信公众号——永久素材的上传

微信公众号永久素材的上传 思路&#xff1a;1.需要上传到本地&#xff08;因为后面需要用的本地的绝对路径 2.上传到微信服务器 3.添加信息到本地数据库 一、上传图片到本地 文件上传的方法 以下是我的代码 首先更改文件上传的配置 而后写我们的文件上传方法 if (request…

nodejs在Liunx上的部署生产方式-PM2

先安装&#xff1a;npm install -g pm2 &#xff08;注意&#xff1a;使用它要先安装它&#xff0c;用root账号和全局模式安装一下&#xff09; 安装完成使用&#xff1a;pm2 -v 查看版本信息 安装成功之后&#xff0c;启动nodejs项目&#xff1a;pm2 start app.js --项目名…

安卓逆向之基于Xposed-ZjDroid脱壳 逆向分析(脱壳)

安卓逆向——某力播逆向分析(脱壳) 一、环境 这一步真的头疼&#xff0c;环境很重要&#xff0c;各种测试&#xff0c;一下是我测试的环境&#xff0c;由于没有真机&#xff0c;就拿虚拟机做测试 1. Xposed 2. FDex2 3. fiddler 4. 软件 二、抓包 通过 …

nginx php mysql一些常用命令(windows linux)

Nginx(nginx) 通常安装路径 /usr/local/nginx检查Nginx是否运行 ps aux | grep nginx重启Nginx /usr/local/nginx/sbin/nginx -s reload停止Nginx /usr/local/nginx/sbin/nginx -s stop测试配置 /usr/local/nginx/sbin/nginx -tPHP(php) PHP安装路径 /usr/local/php查看PH…

nodejs图片转换字节保存

fs.readFile(上传图片路径, function(err, data) {if (err) {// 错误处理return;}var base64str new Buffer(data).toString(base64); // 图片转换为字节fs.writeFileSync(copy.jpg, base64str); // 字节流保存为图片});

Apache/Tomcat/JBOSS/Nginx(2)

三.性能测试&#xff1a;将分别测试3种软件在对动态页面和静态页面请求及并发时的响应时间l 静态页面搜狐首页LIGHTTPDn/-c(ab参数)cpu%MemRequestsperSecondTime taken for tests100000/1006460462.7521.6100000/2006760312.0732.4100000/5008360137.2472.8100000/1000出现错误…

安卓逆向代码反混淆 Simplify工具 JEB2反混淆神器

【技术分享】Android程序反混淆利器——Simplify工具 https://www.anquanke.com/post/id/85388 发布时间&#xff1a;2017-01-23 17:21:23 问题背景 Android程序代码混淆是Android开发者经常用来防止app被反编译之后迅速被分析的常见手法。在没有混淆的代码中&#xff0c;被…

nodejs字符与字节之间的转换

new Buffer("Hello World").toString("base64"); /* yields SGVsbG8gV29ybGQNCg */new Buffer("SGVsbG8gV29ybGQNCg").toString("ascii"); /* yields Hello World */

Vmware虚拟机的安装和使用

安装虚拟机 一、安装虚拟机Vmware Workstation 下一步 下一步 如果C盘剩余空间大&#xff08;大于50G&#xff09;&#xff0c;可安装在C盘 二、在虚拟机中安装Linux系统&#xff1a; 准备工作&#xff1a; Linux系统镜像文件&#xff08;ISO文件&#xff09; 1 、新建虚拟机…

XCode快捷键

1. 文件CMD N: 新文件CMD SHIFT N: 新项目CMD O: 打开CMD S: 保存CMD SHIFT S: 另存为CMD W: 关闭窗口CMD SHIFT W: 关闭文件2. 编辑 CMD [: 左缩进CMD ]: 右缩进CMD CTRL LEFT: 折叠CMD CTRL RIGHT: 取消折叠CMD CTRL TOP: 折叠全部函数CMD CTRL BOTTOM:…