python爬虫中requests库和正则表达式之淘宝爬虫实战
#python版本基于2.7
使用requests库是需要安装的,requests库相比urllib 库来说更高级方便一点,同时与scrapy相比较还是不够强大,本文主要介绍利用requests库和正则表达式完成一项简单的爬虫小项目----淘宝商品爬虫。
有关于更多requests库的使用方法请参考:官方文档
第一步:我们先打开淘宝网页
然后搜索你想爬取的商品信息,比如:“手机”。然后可以看到各个商品的“商品名称”、“商品价格”。我们可以爬取手机的名称和价格,从而达到“货比三家”的功能。
第二步:鼠标右键点击网页的空白处,选中“查看页面源代码”,从页面源代码中获取商品名称和商品价格对应的字典中的key值,从而利用正则表达式来爬取所有商品的信息。
鼠标选中“查看页面源代码”后,会出现以下页面:
HTML格式的源代码,为了查找商品名称和商品价格对应的标签,也就是字典中的key,我们可以直接复制淘宝某一个商品的名称或者价格信息,在页面源代码中查找相对应的信息。不同的浏览器中,按Ctrl+F键可进入查找模式。
现在复制粘贴其中一个商品的名称信息“荣耀 荣耀9青春版”,得到如下结果:
可以发现其中的键值对,“title”是“荣耀 荣耀9青春版”的key,现在我们就得到了商品名称所对应的标签,同样的方法可以查找出商品价格对应的标签,这里就不过多阐述,直接给出:
现在得到了商品名称和价格对应的标签:“title”和“price”。
如果这样进行爬虫的话,只能爬取一个网页中的商品,如果我们还想爬第二页,第三页就要寻找其中每翻一次页中的网址对应的变化信息。
先来看看淘宝“手机”商品中第二页和第三页中的网址变化信息。
第二页:
第三页:
我们看到,无论是第二页第三页,只有最后的“&s=**”部分不一致,同时第二页对应的s=48,第三页对应的s=96,可以推测出第i页的s=48*(i-1),我们只需要把这个url添加到我们的爬取程序上,用for循环实现这个url的更新即可。
第三步:进入编写实例
这里用python语言编写程序实现爬虫功能。
由于需要用到正则表达式和requests库,所以先引入。
import requests
import re
先定义好一个主函数main,把各个功能模块化,然后再去编写各个模块的具体代码。
def main():goods = '手机'depth = 3 #爬取3页start_url = 'http://s.taobao.com/search?q=' + goods #爬取商品的urlinfoList = [] #初始化一个列表,方便把爬取的键值对添加到里面,然后读取for i in range(depth): #for循环更新urltry: #处理异常url = start_url + '&s=' + str(48*i) #每页的urlhtml = getHTMLText(url) #获取页面信息parsePage(infoList, html) #解析获取的信息,捕捉商品信息的键值对并且添加到列表中except:continueprintGoodsList(infoList) #打印列表中的键值对信息
主函数写完了,我们把各功能的模块具体化。
首先是getHTMLText()函数,获取url页面的信息文本:
def getHTMLText(url):try:r = requests.get(url, timeout=30) #get方法请求url链接,如果超过30秒没有响应就退出r.raise_for_status() #状态码,如果是200则请求成功r.encoding = r.apparent_encoding #将编码方式更改为捕捉到的内容的编码方式,中文网页一般utf-8return r.textexcept:return ""
然后是 parsePage( )函数,解析页面信息,将商品名称和商品价格组合成一对键值对,然后添加到列表里。需要用到正则表达式。
def parsePage(ilt, html):try:plt = re.findall(r'\"price\"\:\"[\d\.]*\"',html) #finfall功能将所有的value数字整合在plt列表tlt = re.findall(r'\"title\"\:\".*?\"',html) #将所有title的value整合在tlt列表for i in range(len(plt)): #基于列表plt的长度使用for循环price = eval(plt[i].split(':')[1]) #split用“:”切割key和value;eval可以转化格式title = eval(tlt[i].split(':')[1])ilt.append([price , title]) #将商品的价格和名称作为键值对添加到ilt列表except:print("")
最后是打印函数printGoodsList( ),输出爬取的结果:
def printGoodsList(ilt):tplt = "{:4}\t{:8}\t{:16}"tplt2 = "{:8}\t{:16}\t{:14}"print(tplt2.format("序号", "价格", "商品名称")) #格式化输出函数count = 0 #序号for g in ilt:count = count + 1print(tplt.format(count, g[0], g[1])) #依次输出序号,价格,商品名称
最后执行主函数:main(),查看结果
以上代码中的eval,split,format方法都很简单,下面给出这三个方法的介绍链接:
eval
python eval方法
split
python split方法
format
python format方法
文章到此结束,请各位自行尝试。
python爬虫中requests库和正则表达式之淘宝爬虫实战相关推荐
- python爬虫学习实践(一):requests库和正则表达式之淘宝爬虫实战
使用requests库是需要安装的,requests库相比urllib 库来说更高级方便一点,同时与scrapy相比较还是不够强大,本文主要介绍利用requests库和正则表达式完成一项简单的爬虫小项 ...
- python中requests库的用途-数据爬虫(三):python中requests库使用方法详解
有些网站访问时必须带有浏览器等信息,如果不传入headers就会报错,如下 使用 Requests 模块,上传文件也是如此简单的,文件的类型会自动进行处理: 因为12306有一个错误证书,我们那它的网 ...
- python网络爬虫系列教程——python中requests库应用全解
全栈工程师开发手册 (作者:栾鹏) python教程全解 python中requests库的基础应用,网页数据挖掘的常用库之一.也就是说最主要的功能是从网页抓取数据. 使用前需要先联网安装reques ...
- python get方法列表参数_python中requests库get方法带参数请求
起因是想爬五等分的花嫁的漫画.这是其中的一个坑 先上代码 data={ 'cid':567464, 'page':, 'key':'', 'language':1, 'gtk':6, '_cid':5 ...
- python爬虫基础-requests库
python爬虫基础-requests库 python爬虫 1.什么是爬虫? 通过编写程序,模拟浏览器上网,然后让其去互联网上抓取数据的过程. 注意:浏览器抓取的数据对应的页面是一个完整的页面. 为什 ...
- python中requests库的用途-python中requests库session对象的妙用详解
在进行接口测试的时候,我们会调用多个接口发出多个请求,在这些请求中有时候需要保持一些共用的数据,例如cookies信息. 妙用1 requests库的session对象能够帮我们跨请求保持某些参数,也 ...
- python中requests库入门及写入文件
1.python中requests库入门 import requests r = requests.get("https://www.baidu.com") print(r.sta ...
- python的requests库的添加代理_python爬虫之requests库使用代理
python爬虫之requests库使用代理 发布时间:2020-03-25 17:00:54 来源:亿速云 阅读:110 作者:小新 今天小编分享的是关于python爬虫的requests库使用代理 ...
- python msgpack_Python中msgpack库的使用
msgpack用起来像json,但是却比json快,并且序列化以后的数据长度更小,言外之意,使用msgpack不仅序列化和反序列化的速度快,数据传输量也比json格式小,msgpack同样支持多种语言 ...
最新文章
- windows 下anaconda创建环境慢的解决办法
- 理科卷math·english·chinese·biology·chemistry·physics
- CakePHP 2.x十分钟博客教程
- stm32 网络 服务器通信协议,利用stm32的lwip TCP/IP协议栈的通信的思路
- windows如何安装codeblock
- [教程][6月4日更新]VMware 8.02虚拟机安装MAC lion 10.7.3教程 附送原版提取镜像InstallESD.iso!...
- Python分析与处理---利用Python进行学生成绩分析
- 51单片机——LED点阵
- 成都拓嘉辰丰:拼多多新手开店需掌握的运营方向
- Rsync简介和使用
- 软考中级 真题 2015年上半年 信息系统管理工程师 应用技术
- android 经纬度 转换,andorid将经纬度转换到手机屏幕上显示
- 微信WeChatHelper3.1.0.72逆向-微信WeChatHelper3.1.0.72接口(WeChatHelper3.1.0.72.dll)-VC++调用实例方法(win32)
- 2019机器学习框架之争:与Tensorflow竞争白热化,进击的PyTorch赢在哪里?
- linux检查邮件命令,linux下mail 邮件查看命令
- Android自定义圆形调色板,可设置属性
- python中namedtuple函数用法详解
- 图解angr中两种CFG的区别
- 汇编基础--cmp汇编指令
- “文件或目录损坏且无法读取”的简单修复
热门文章
- 构造函数与拷贝构造函数
- Process finished with exit code 133 (interrupted by signal 5: SIGTRAP)
- 仿手环运动app的html,618不容错过的“实力派”手环:运动、健康小助手支持双平台支付...
- 一个常用的自定义弹框封装(适配 AndroidX),加载 ProgressDialog,状态显示的 StatusDialog 和自定义 Toast,全部支持背景颜色,圆角,边框和文字的自定义,构建者模
- 哈尔滨一同学用笔在纸上画线,一只瓢虫跟着爬爬爬。
- 字符指针变量和字符数组的比较
- node搭建vue脚手架
- Android很多功能iPhone没有,为什么越来越多的人选择Android手机,iPhone到底哪点比不了?...
- uniapp + uviewui —— u-tabbar的使用
- 计算机调整分区出现无法读取文件提示,电脑从硬盘分区往其他分区复制文件的时候提示“一个意外错误使你无法复制该文件……”...