#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库和正则表达式之淘宝爬虫实战相关推荐

  1. python爬虫学习实践(一):requests库和正则表达式之淘宝爬虫实战

    使用requests库是需要安装的,requests库相比urllib 库来说更高级方便一点,同时与scrapy相比较还是不够强大,本文主要介绍利用requests库和正则表达式完成一项简单的爬虫小项 ...

  2. python中requests库的用途-数据爬虫(三):python中requests库使用方法详解

    有些网站访问时必须带有浏览器等信息,如果不传入headers就会报错,如下 使用 Requests 模块,上传文件也是如此简单的,文件的类型会自动进行处理: 因为12306有一个错误证书,我们那它的网 ...

  3. python网络爬虫系列教程——python中requests库应用全解

    全栈工程师开发手册 (作者:栾鹏) python教程全解 python中requests库的基础应用,网页数据挖掘的常用库之一.也就是说最主要的功能是从网页抓取数据. 使用前需要先联网安装reques ...

  4. python get方法列表参数_python中requests库get方法带参数请求

    起因是想爬五等分的花嫁的漫画.这是其中的一个坑 先上代码 data={ 'cid':567464, 'page':, 'key':'', 'language':1, 'gtk':6, '_cid':5 ...

  5. python爬虫基础-requests库

    python爬虫基础-requests库 python爬虫 1.什么是爬虫? 通过编写程序,模拟浏览器上网,然后让其去互联网上抓取数据的过程. 注意:浏览器抓取的数据对应的页面是一个完整的页面. 为什 ...

  6. python中requests库的用途-python中requests库session对象的妙用详解

    在进行接口测试的时候,我们会调用多个接口发出多个请求,在这些请求中有时候需要保持一些共用的数据,例如cookies信息. 妙用1 requests库的session对象能够帮我们跨请求保持某些参数,也 ...

  7. python中requests库入门及写入文件

    1.python中requests库入门 import requests r = requests.get("https://www.baidu.com") print(r.sta ...

  8. python的requests库的添加代理_python爬虫之requests库使用代理

    python爬虫之requests库使用代理 发布时间:2020-03-25 17:00:54 来源:亿速云 阅读:110 作者:小新 今天小编分享的是关于python爬虫的requests库使用代理 ...

  9. python msgpack_Python中msgpack库的使用

    msgpack用起来像json,但是却比json快,并且序列化以后的数据长度更小,言外之意,使用msgpack不仅序列化和反序列化的速度快,数据传输量也比json格式小,msgpack同样支持多种语言 ...

最新文章

  1. windows 下anaconda创建环境慢的解决办法
  2. 理科卷math·english·chinese·biology·chemistry·physics
  3. CakePHP 2.x十分钟博客教程
  4. stm32 网络 服务器通信协议,利用stm32的lwip TCP/IP协议栈的通信的思路
  5. windows如何安装codeblock
  6. [教程][6月4日更新]VMware 8.02虚拟机安装MAC lion 10.7.3教程 附送原版提取镜像InstallESD.iso!...
  7. Python分析与处理---利用Python进行学生成绩分析
  8. 51单片机——LED点阵
  9. 成都拓嘉辰丰:拼多多新手开店需掌握的运营方向
  10. Rsync简介和使用
  11. 软考中级 真题 2015年上半年 信息系统管理工程师 应用技术
  12. android 经纬度 转换,andorid将经纬度转换到手机屏幕上显示
  13. 微信WeChatHelper3.1.0.72逆向-微信WeChatHelper3.1.0.72接口(WeChatHelper3.1.0.72.dll)-VC++调用实例方法(win32)
  14. 2019机器学习框架之争:与Tensorflow竞争白热化,进击的PyTorch赢在哪里?
  15. linux检查邮件命令,linux下mail 邮件查看命令
  16. Android自定义圆形调色板,可设置属性
  17. python中namedtuple函数用法详解
  18. 图解angr中两种CFG的区别
  19. 汇编基础--cmp汇编指令
  20. “文件或目录损坏且无法读取”的简单修复

热门文章

  1. 构造函数与拷贝构造函数
  2. Process finished with exit code 133 (interrupted by signal 5: SIGTRAP)
  3. 仿手环运动app的html,618不容错过的“实力派”手环:运动、健康小助手支持双平台支付...
  4. 一个常用的自定义弹框封装(适配 AndroidX),加载 ProgressDialog,状态显示的 StatusDialog 和自定义 Toast,全部支持背景颜色,圆角,边框和文字的自定义,构建者模
  5. 哈尔滨一同学用笔在纸上画线,一只瓢虫跟着爬爬爬。
  6. 字符指针变量和字符数组的比较
  7. node搭建vue脚手架
  8. Android很多功能iPhone没有,为什么越来越多的人选择Android手机,iPhone到底哪点比不了?...
  9. uniapp + uviewui —— u-tabbar的使用
  10. 计算机调整分区出现无法读取文件提示,电脑从硬盘分区往其他分区复制文件的时候提示“一个意外错误使你无法复制该文件……”...