使用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(),查看结果

序号       名称                  价格            1 896         小米 红米5 Plus     2   1013        魅族 魅蓝S6         3   1374        vivo Y75        4   1385        华为 畅享7S         5   746         小米 红米5          6   2696        荣耀 V10          7   1323        荣耀 畅玩7X         8   5661        苹果 iPhone 8 Plus 9  7219        苹果 iPhone X     10  5226        苹果 iPhone 8     11  1752        小米 Note3        12  4514        华为 Mate 10 Pro  13  2998        vivo X20        14  1942        vivo X9s        15  2144        荣耀 荣耀9          16  3776        华为 Mate 10      17  4971        苹果 iPhone 7 Plus18  2144        小米 小米手机6        19  1163        小米 5X           20  2883        小米 MIX2         21  560         小米 红米5A         22  796         华为 畅享7          23  954         荣耀 V9 PLAY      24  2794        一加手机5T          25  2904        华为 P10          26  4184        苹果 iPhone 7     27  4500        三星 Galaxy S8    28  5452        三星 Galaxy Note8 29  903         魅族 魅蓝note6      30  4606        三星 Galaxy S8+   31 584         小米 红米Note 5A    32  1394        360手机 N6 Pro    33  1104        华为 畅享7 Plus     34  1192        vivo Y66i       35  2230        荣耀 V9           36  1830        锤子 坚果Pro 2      37  1274        小米 Max2         38  3298        vivo X20Plus    39  1392        诺基亚 诺基亚 6 第二代   40  737         荣耀 畅玩6A         41  3299        OPPO R11s Plus  42  3371        美图 T8s          43  534         小米 红米4A         44  1815        魅族 PRO7         45  1086        荣耀 荣耀8青春版       46  2099        OPPO A79        47  791         小米 红米Note 4X    48  1932        华为 麦芒6          49  1987        vivo Y79        50  2524        努比亚 Z17         51  1299        OPPO A57        52  691         魅族 魅蓝6          53  1226        努比亚 Z17 mini    54  5308        美图 V6           55  736         魅族 魅蓝note5      56  1699        OPPO A73        57  2202        美图 M8           58  3281        华为 P10 Plus     59  829         360手机 N6 Lite   60  1226        荣耀 荣耀9青春版       61  1474        诺基亚 诺基亚7        62  2546        华为 NOVA 2S      63  1073        锤子 坚果Pro        64  2653        美图 M8S          65  1592        华为 NOVA 2       66  597         荣耀 畅玩6          67  761         华为 畅享6S         68  3186        华为 Mate 9 Pro   69  2663        华为 Mate 9       70  3770        索尼 Xperia XZ Premium71  1399        OPPO A83        72  773         魅族 魅蓝E2         73  2843        OPPO R11s       74  2100        三星 Galaxy C9 Pro75  2257        魅族 PRO7 Plus    76  1028        荣耀 畅玩6X         77  651         魅族 魅蓝5s         78  1326        华为 NOVA 青春版     79  2223        vivo X9s Plus   80  2807        努比亚 Z17S        81  2900        美图 T8           82  1109        360手机 N6        83  657         小米 红米4X         84  1117        vivo Y66        85  1668        魅族 PRO 6 Plus   86  543         天语 X11          87  150         诺基亚 新105        88  1083        华为 NOVA         89  2077        华为 NOVA 2 PLUS  90  3435        vivo Xplay6     91  1883        vivo X9         92  194         创星 S1           93  3041        索尼 Xperia XZ1   94  859         vivo Y53        95  171         波导 A520         96  1412        vivo Y67        97  935         vivo Y55        98  2563        小米 MIX          99  2355        OPPO R11        100 1966        小米 Note 2       101 1402        魅族 PRO 6S       102 537         魅族 魅蓝 A5        103 2360        谷歌 Pixel XL     104 175         纽曼 F9           105 2499        金立 M7           106 398         誉品 5A           107 1988        vivo X9Plus     108 1999        金立 S10          109 2036        OPPO R9S        110 1275        荣耀 荣耀8          111 1646        小米 5S           112 2092        OPPO R9s Plus   113 677         华为 畅享6          114 1089        360手机 N5s       115 1752        苹果 iPhone SE    116 4590        HTC U11+        117    437         誉品 I7S          118 387         索野 7S           119 2996        黑莓 KEYone       120 125         纽曼 M560         121 1172        酷派 Cool S1      122 3888        中兴 天机Axon M     123 899         小辣椒 红辣椒S6       124 1735        努比亚 Z17miniS    125 1260        OPPO A59S       126 1750        三星 Galaxy C8    127 9730        三星 SM-W2017     128 897         欧加 S11 Plus     129 2999        欧奇 OKP6 PRO     130 892         魅族 魅蓝X          131 3358        vivo X20Plus屏幕指纹版132    3864        HTC U11         133 583         魅族 魅蓝5          134 112         小辣椒 G108        135 1266        华为 MATE8        136 3299        HTC U11 EYEs    137 737         360手机 VIZZA     138 1767        三星 Galaxy S7 edge139    95          天语 T2           140 202         创星 R9           141 1791        小米 5s Plus      142 2603        三星 Galaxy S7    143 2633        一加手机5           144 1599        金立 大金钢2

python爬虫学习实践(一):requests库和正则表达式之淘宝爬虫实战相关推荐

  1. python爬虫中requests库和正则表达式之淘宝爬虫实战

    #python版本基于2.7 使用requests库是需要安装的,requests库相比urllib 库来说更高级方便一点,同时与scrapy相比较还是不够强大,本文主要介绍利用requests库和正 ...

  2. python 爬虫学习入门6 requests库 添加代理proxies等其他信息

    Requests库 通过Requests 库 提供的方法我们可以在请求页面的时候同时添加更多的信息,在urllib库中同时添加代理和User-agent 我在网上找了一些办法但是没有理解就不在这里说了 ...

  3. python爬虫登录网站_python爬虫学习,使用requests库来实现模拟登录4399小游戏网站。...

    1.首先分析请求,打开4399网站. image 右键检查元素或者F12打开开发者工具.然后找到network选项, image 这里最好勾选perserve log 选项,用来保存请求日志.这时我们 ...

  4. 爬虫学习实践(1)——我的第一个小爬虫

    文章目录 应用流程 一个简单爬虫实例 获取 提取 储存 最近由于竞赛需要,准备自学一下爬虫,以备不时之需,参考书籍是唐松的<Python网络爬虫从入门到实践>,上面的代码也大多来源于书上, ...

  5. python基础代码库-python爬虫基础教程:requests库(二)代码实例

    get请求 简单使用 import requests ''' 想要学习Python?Python学习交流群:973783996满足你的需求,资料都已经上传群文件,可以自行下载! ''' respons ...

  6. python爬虫requests库_python爬虫基础教程:requests库(二)代码实例

    get请求 简单使用 import requests ''' 想要学习Python?Python学习交流群:973783996满足你的需求,资料都已经上传群文件,可以自行下载! ''' respons ...

  7. Python学习笔记:requests库

    Python学习笔记:requests库 利用requests这个功能强大的网络请求库,可以像浏览器一样发送各种HTTP请求来获取网站的数据. 一.运行环境 1.系统版本:Windows 10 2.P ...

  8. 手机版python3.6.6的requests库下载_Python爬虫之Python3.6 Requests库的基本使用方法

    Python爬虫之Python3.6 Requests库的基本使用方法 未分类 在使用Python过程中,使用http处理各种请求是我们绕不过去的,在Python中开发爬虫用来抓取各种网络上的资源,就 ...

  9. python3爬虫系列03之requests库:根据关键词自动爬取下载百度图片

    python3爬虫系列03之requests库:根据关键词自动爬取下载百度图片 1.前言 在上一篇文章urllib使用:根据关键词自动爬取下载百度图片 当中,我们已经分析过了百度图片的搜索URL的变化 ...

最新文章

  1. 网络瓶颈、线程死锁、内存泄露溢出、栈堆、ajax
  2. 南开校长曹雪涛团队12篇论文被调查“可信性”,此前被举报实验图片有PS痕迹...
  3. 初学者选黑卡还是微单_入门单反和微单相机该买哪个
  4. 96.总线里的异步通信
  5. php 域名验证系统_PHP授权验证系统(域名+IP双重验证一键更新授权系统)
  6. WP博客wordpress,robots.txt写法
  7. 分享一个CSS3的网格系统架构 - ResponsiveAeon
  8. 使用Encog,ROME,JSoup和Google Guava进行博客分类
  9. Nginx 实战(一) 集群环境搭建
  10. Problem E:结构体---点坐标结构体
  11. Qt多线程-QThreadPool线程池与QRunnable
  12. mysql中怎么实现Apriori_关联规则算法Apriori的学习与实现
  13. Linux下tar压缩与解压缩文件
  14. 使用Mysql 5.5数据库Hibernate自动建表创建表出错table doesn't exist
  15. 据说这是世界上流传最广的财务模型,不用就out了
  16. AWS Direct connect,VPC Peering,VPC endpoint
  17. 吐血实践-TiDB离线安装
  18. sofa-jraft源码学习
  19. html脚注制作,幸福西饼:静态页面制作项目总结
  20. 2021年全国职业院校技能大赛:网络系统管理项目-真题-模块C-2全套视频讲解含无线地勘

热门文章

  1. c语言数组项目按身高排序,过三关 Java冒泡排序选择排序插入排序小练习
  2. oracle rman 00571,rman备份报RMAN-00571、RMAN-00569、RMAN-03009
  3. android+4.4.2+隐藏虚拟按钮,Android 4.4.2 横屏应用隐藏状态栏和底部虚拟键的方法...
  4. 基于android的美食餐厅订餐点餐APP丨【可微信小程序与android studio运行】
  5. ARM与射频芯片TRF796x的SPI通信研究
  6. android app唤醒机制,Android平台下APP唤醒机制
  7. 大数据,让新世界扑面而来
  8. 通过Aidlux实现Yolov5人流跟踪统计的极简部署并发送手机提醒
  9. android手机怎么连电视,智能电视怎么连接手机?这三种方法满足你各种需求
  10. php输出时间的写法,PHP获取当前时间、时间戳的各种格式写法汇总[日期时间]