python简单应用!用爬虫来采集天猫所有优惠券信息,写入本地文件
今天给大家分享一个小网站的数据采集,并写到excel里面!
分析网站
目标网站是“小咪购”,这里有天猫所有的含有购物券的商品信息,我们今天就来抓它吧!
随便找一段文字,然后点击右键查看网页源代码,看看是否存在该文字,如果存在,那么这个网页就是静态网站了!很幸运,这个网站居然是静态的。
那就简单了,不需要去分析ajax加载数据或者找json包了,直接获取网页源代码==>>匹配相关内容==>>保存数据即可!
工具和库
Windows+python3.6
import random
import time
import requests
from lxml import etree
import xlwt
用这几个库就可以搞定了!注意xlwt和xlrd这2个库都是操作excel的,一个是保存数据,一个是读取数据,不要搞混了。
开始写代码
首先写一个函数,将所有的爬虫工作写到函数里,如下图
这个网站需要写上headers,不写是抓不到数据的!新建一个列表,将爬到的相关数据写入列表,它的形式大概是这样的:【【产品信息A1,2,3……】,【产品信息B1,2,3……】……】,这么写列表是因为我们最后要将他们写如excel表格,那么列表中的每一个元素(还是列表形式)都是一行数据,方便写入!
注意第33行,列表构成的时候,用+连接会将所有列表中的元素放入一个列表,比如:【1,2,3】+【4,5】=【1,2,3,4,5】,而用append()函数则会将后面的内容作为一个元素加入列表中,比如:[1,2,3].append([4,5])=[1,2,3,[4,5]]
下来就是写入excel了,首先是新建excel表格,并写入第一行数据
wb = xlwt.Workbook(encoding='utf-8') ws = wb.add_sheet('优惠券') path = 'E://python//优惠券.xls' head = ['序号','商品类型','商品名称','优惠券','券后价','在售价','销量','推荐理由','商品链接'] for i in range(9): ws.write(0,i,head[i])
后面的数据,依次按格式写入并最后用wb.save(路径)的方式保存即可!完整代码及效果如下
import random import time import requests from lxml import etree import xlwt def main(line = 1): headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:60.0) Gecko/20100101 Firefox/60.0'} url = 'http://www.hlxns.com' html = requests.get(url, headers=headers) html.encoding = 'utf-8' page = etree.HTML(html.text).xpath('//a[@class="item"]/text()')[-1] for i in range(int(line/100)+1, int(page) + 1): k = 1 lis = [] print('【开始下载】第%d页数据'%i) htm = requests.get(url + '/index.php?r=l&page={}'.format(str(i)), headers=headers) htm.encoding = 'utf-8' data = etree.HTML(htm.text) url_sps = data.xpath('//div[@class="title"]/a/@href') for url_sp in url_sps:#一页100条 time.sleep(random.random()*2) print(' 【正在下载】第%03d页第%03d条商品数据'%(i,k),end='') k += 1 html_sp = requests.get(url + url_sp, headers=headers) html_sp.encoding = 'utf-8' info = etree.HTML(html_sp.text) title = info.xpath('//span[@class="title"]/text()') # 产品 summary = [x.replace('推荐理由:','') for x in info.xpath('//span[@class="theme-color-3"]/text()')] # 推荐理由 category = info.xpath('//div[@class="nav-wrap"]/div/a[3]/text()') # 类别 now_price = info.xpath('//span[@class="now-price"]/b[2]/i/text()') # 券后价 old_price = info.xpath('//span[@class="org-price"]/i/text()') # 在售价 nums = info.xpath('//div[@class="text-wrap"]/span[2]/i/text()') # 销量 coupon = info.xpath('//div[@class="buy-coupon theme-color-8"]/span/b/text()') # 优惠券 sp_url = info.xpath('//a[@class="theme-bg-color-8"]/@href') # 链接 lis.append(category+title+coupon+now_price+old_price+nums+summary+sp_url) print('................................【下载完成】') print('######第%d页数据 【下载完成】'%i) for ii in range(len(lis)): lis[ii].insert(0, line) # 添加序号 for j in range(9): # 列 ws.write(line, j, lis[ii][j]) line += 1 print('>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>【写入本页数据完成】<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<') wb.save(path) if __name__ == '__main__': wb = xlwt.Workbook(encoding='utf-8') ws = wb.add_sheet('优惠券') path = 'E://python//优惠券.xls' head = ['序号','商品类型','商品名称','优惠券','券后价','在售价','销量','推荐理由','商品链接'] for i in range(9): ws.write(0,i,head[i]) main()
由于网站更新的很快(官方说是10分钟。。。),所以也没有抓取那么多,所有的页面有大约600多页,一页100条信息,也就是说一共有6万多条商品信息,如果不用多线程的话会很慢!
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Java高级——缓存的使用场景
当你的应用扛不住,知道要使用缓存了,应该怎么做呢? 场景1:和数据库中的数据结构保持一致,原样缓存 这种场景是最常见的场景,也是很多架构使用缓存的适合,最先涉及到的场景。 基本就是数据库里面啥样,我缓存也啥样,数据库里面有商品信息,缓存里面也放商品信息,唯一不同的是,数据库里面是全量的商品信息,缓存里面是最热的商品信息。 每当应用要查询商品信息的时候,先查缓存,缓存没有就查数据库,查出来的结果放入缓存,从而下次就查到了。 这个是缓存最最经典的更新流程。这种方式简单,直观,很多缓存的库都默认支持这种方式。 场景2:列表排序分页场景的缓存 有时候我们需要获得一些列表数据,并对这些数据进行排序和分页。 例如我们想获取点赞最多的评论,或者最新的评论,然后列出来,一页一页的翻下去。 在这种情况下,缓存里面的数据结构和数据库里面完全不一样。 如果完全使用数据库进行实现,则按照某种条件将所有的行查询出来,然后按照某个字段进行排序,然后进行分页,一页一页的展示。 但是当数据量比较大的时候,这种方式往往成为瓶颈,首先涉及的数据库行数比较多,而且排序也...
- 下一篇
实现Chrome Devtools调试JavaScript V8引擎
最近开发小程序JavaScript的运行时,通过在客户端嵌入JavaScript V8引擎来实现。前端同学需要调试JavaScript代码,正好Chrome浏览器的Devtools是与V8的Inspector调试协议是一脉相承的,理论上是可以使用Chrome Devtools调试JavaScript V8引擎。 V8的文档里提到可以把Chrome Devtools作为调试器的前端来调试JavaScript。d8工程里虽然有个例子,但是无法run起来。写一下我实现。 InspectorAgent创建一个Websocket服务,假设打开一个9224端口等待调试器前端连接。Chrome浏览器打开chrome-devtools://devtools/bundled/inspector.html?ws=127.0.0.1:9224就会呈现一个D
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS关闭SELinux安全模块
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- Hadoop3单机部署,实现最简伪集群
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- CentOS6,CentOS7官方镜像安装Oracle11G
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS8编译安装MySQL8.0.19
- CentOS6,7,8上安装Nginx,支持https2.0的开启