云栖君导读:本文详细讲解了python网络爬虫,并介绍抓包分析等技术,实战训练三个网络爬虫案例,并简单补充了常见的反爬策略与反爬攻克手段。通过本文的学习,可以快速掌握网络爬虫基础,结合实战练习,写出一些简单的爬虫项目。

演讲嘉宾简介:


韦玮,企业家,资深IT领域专家/讲师/作家,畅销书《精通Python网络爬虫》作者,云栖社区认证技术专家。

本次直播视频精彩回顾地址:http://click.aliyun.com/m/45918/

本节课(爬虫)所有代码下载地址:http://click.aliyun.com/m/45919/

以下内容根据演讲嘉宾视频分享以及PPT整理而成。

本次的分享主要围绕以下五个方面:

一、数据采集与网络爬虫技术简介

二、网络爬虫技术基础

三、抓包分析

四、挑战案例

五、推荐内容

一、数据采集与网络爬虫技术简介


网络爬虫是用于数据采集的一门技术,可以帮助我们自动地进行信息的获取与筛选。从技术手段来说,网络爬虫有多种实现方案,如PHP、Java、Python ...。那么用python 也会有很多不同的技术方案(Urllib、requests、scrapy、selenium...),每种技术各有各的特点,只需掌握一种技术,其它便迎刃而解。同理,某一种技术解决不了的难题,用其它技术或方依然无法解决。网络爬虫的难点并不在于网络爬虫本身,而在于网页的分析与爬虫的反爬攻克问题。希望在本次课程中大家可以领会爬虫中相对比较精髓的内容。

二、网络爬虫技术基础


在本次课中,将使用Urllib技术手段进行项目的编写。同样,掌握了该技术手段,其他的技术手段也不难掌握,因为爬虫的难点不在于技术手段本身。本知识点包括如下内容:

  • Urllib基础

  • 浏览器伪装

  • 用户代理池

  • 糗事百科爬虫实战

需要提前具备的基础知识:正则表达式

1、Urllib基础


爬网页

打开python命令行界面,两种方法:ulropen()爬到内存,urlretrieve()爬到硬盘文件。

同理,只需换掉网址可爬取另一个网页内容

上面是将爬到的内容存在内存中,其实也可以存在硬盘文件中,使用urlretrieve()方法

>>> urllib.request.urlretrieve("http://www.jd.com",filename="D:/我的教学/Python/阿里云系列直播/第2次直播代码/test.html")

之后可以打开test.html,京东网页就出来了。由于存在隐藏数据,有些数据信息和图片无法显示,可以使用抓包分析进行获取。

2、浏览器伪装


尝试用上面的方法去爬取糗事百科网站url="https://www.qiushibaike.com/",会返回拒绝访问的回复,但使用浏览器却可以正常打开。那么问题肯定是出在爬虫程序上,其原因在于爬虫发送的请求头所导致。

打开糗事百科页面,如下图,通过F12,找到headers,这里主要关注用户代理User-Agent字段。User-Agent代表是用什么工具访问糗事百科网站的。不同浏览器的User-Agent值是不同的。那么就可以在爬虫程序中,将其伪装成浏览器。

将User-Agent设置为浏览器中的值,虽然urlopen()不支持请求头的添加,但是可以利用opener进行addheaders,opener是支持高级功能的管理对象。代码如下

3、用户代理池


在爬取过程中,一直用同样一个地址爬取是不可取的。如果每一次访问都是不同的用户,对方就很难进行反爬,那么用户代理池就是一种很好的反爬攻克的手段。

  • 第一步,收集大量的用户代理User-Agent

  • 第二步,建立函数UA(),用于切换用户代理User-Agent

for循环,每访问一次切换一次UA

每爬3次换一次UA

(*每几次做某件事情,利用求余运算)

4、第一项练习-糗事百科爬虫实战


目标网站:https://www.qiushibaike.com/

需要把糗事百科中的热门段子爬取下来,包括翻页之后内容,该如何获取?

  • 第一步,对网址进行分析,如下图所示,发现翻页之后变化的部分只是page后面的页面数字。

  • 第二步,思考如何提取某个段子?查看网页代码,如下图所示,可以发现<div class="content">的数量和每页段子数量相同,可以用<div class="content">这个标识提取出每条段子信息。

  • 第三步,利用上面所提到的用户代理池进行爬取。首先建立用户代理池,从用户代理池中随机选择一项,设置UA。

还可以定时的爬取:

换言之,学习爬虫需要灵活变通的思想,针对不同的情况,不同的约束而灵活运用。

三、抓包分析


抓包分析可以将网页中的访问细节信息取出。有时会发现直接爬网页时是无法获取到目标数据的,因为这些数据做了隐藏,此时可以使用抓包分析的手段进行分析,并获取隐藏数据。

1、Fiddler简介


抓包分析可以直接使用浏览器F12进行,也可以使用一些抓包工具进行,这里推荐Fiddler。Fiddler下载安装。假设给Fiddler配合的是火狐浏览器,打开浏览器,如下图,找到连接设置,选择手动代理设置并确定。

假设打开百度,如下图,加载的数据包信息就会在Fiddler中左侧列表中列出来,那么网站中隐藏相关的数据可以从加载的数据包中找到。

2、第二项练习-腾讯视频评论爬虫实战


目标网站:https://v.qq.com/

需要获取的数据:某部电影的评论数据,实现自动加载。

首先可以发现腾讯视频中某个视频的评论,在下面的图片中,如果点击”查看更多评论”,网页地址并无变化,与上面提到的糗事百科中的页码变化不同。而且通过查看源代码,只能看到部分评论。即评论信息是动态加载的,那么该如何爬取多页的评论数据信息?

  • 第一步,分析腾讯视频评论网址变化规律。点击”查看更多评论”,同时打开Fiddler,第一条信息的TextView中,TextView中可以看到对应的content内容是unicode编码,刚好对应的是某条评论的内容。

解码出来可以看到对应评论内容。

将第一条信息的网址复制出来进行分析,观察其中的规律。下图是两个紧连着的不同评论的url地址,如下图,可以发现只有cursor字段发生变化,只要得到cursor,那么评论的地址就可以轻松获得。如何找到cursor值?

  • 第二步,查找网址中变化的cursor字段值。从上面的第一条评论信息里寻找,发现恰好在last字段值与后一条评论的cursor值相同。即表示cursor的值是迭代方式生成的,每条评论的cursor信息在其上一条评论的数据包中寻找即可。

  • 第三步,完整代码

a.腾讯视频评论爬虫:获取”深度解读”评论内容(单页评论爬虫)

b.腾讯视频评论爬虫:获取”深度解读”评论内容(自动切换下一页评论的爬虫)

四、挑战案例


1、第三项练习-中国裁判文书网爬虫实战

目标网站:http://wenshu.court.gov.cn/

需要获取的数据:2018年上海市的刑事案件接下来进入实战讲解。

  • 第一步,观察换页之后的网页地址变化规律。打开中国裁判文书网2018年上海市刑事案件的第一页,在换页时,如下图中的地址,发现网址是完全不变的,这种情况就是属于隐藏,使用抓包分析进行爬取。

  • 第二步,查找变化字段。从Fiddler中可以找到,获取某页的文书数据的地址:http://wenshu.court.gov.cn/List/ListContent

可以发现没有对应的网页变换,意味着中国裁判文书网换页是通过POST进行请求,对应的变化数据不显示在网址中。通过F12查看网页代码,再换页操作之后,如下图,查看ListContent,其中有几个字段需要了解:

  • Param:检索条件

  • Index:页码

  • Page:每页展示案件数量

  • ...

重要的是最后三个字段(vl5x,number,guid)该如何获取?首先,guid即uuid,叫全球唯一标识,是利用python中的uuid随机生成的字段。其次是number字段,找到ListContent上面的GetCode请求,恰好其Response中包含了number字段的值。而GetCode又是通过POST请求的,发现请求的字段只要guid这一项,那么问题便迎刃而解。

后,难点在于vl5x字段如何获取?打开Fiddler,在换页操作后,查看ListContent中的vl5x的值,并在此次ListContent之前出现的数据包中的TextView里寻找这个字段或值,一般的网站可以很容易找到,但中国裁判文书网是政府网站,反爬策略非常高明,寻找的过程需要极高的耐心。

事实上,中国裁判文书网的vl5x字段可以从某个js包中获得,获取的方式是通过getKey()函数。从网页源代码中找到getKey()函数的js代码,由于代码是packed状态,用unpacked工具, 将其进行解码,后利用js界面美观工具可以方便理解。

但无关紧要,只需直接将getKey()函数s代码复制到unpack_js.html中,就可以解出vl5x字段的值,其中需要用到Cookie中的vjkl5字段值。需要注意提前下载好base64.js和md5.js,并在unpack_js.html加载。

  • 第三步,以下是中国裁判文书网爬虫完整代码:

opener.addheaders=[("Referer","http://wenshu.court.gov.cn/list/list/?sorttype=1&conditions=searchWord+1+AJLX++%E6%A1%88%E4%BB%B6%E7%B1%BB%E5%9E%8B:%E5%88%91%E4%BA%8B%E6%A1%88%E4%BB%B6&conditions=searchWord+2018+++%E8%A3%81%E5%88%A4%E5%B9%B4%E4%BB%BD:2018&conditions=searchWord+%E4%B8%8A%E6%B5%B7%E5%B8%82+++%E6%B3%95%E9%99%A2%E5%9C%B0%E5%9F%9F:%E4%B8%8A%E6%B5%B7%E5%B8%82")]

urllib.request.install_opener(opener)

#用户代理池

import random

uapools=[

"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.79 Safari/537.36 Edge/14.14393",

"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.22 Safari/537.36 SE 2.X MetaSr 1.0",

"Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Maxthon 2.0)",

]

#访问首页urllib.request.urlopen("http://wenshu.court.gov.cn/list/list/?sorttype=1&conditions=searchWord+1+AJLX++%E6%A1%88%E4%BB%B6%E7%B1%BB%E5%9E%8B:%E5%88%91%E4%BA%8B%E6%A1%88%E4%BB%B6&conditions=searchWord+2018+++%E8%A3%81%E5%88%A4%E5%B9%B4%E4%BB%BD:2018&conditions=searchWord+%E4%B8%8A%E6%B5%B7%E5%B8%82+++%E6%B3%95%E9%99%A2%E5%9C%B0%E5%9F%9F:%E4%B8%8A%E6%B5%B7%E5%B8%82").read().decode("utf-8","ignore")

如此便可批量获取中国裁判文书网中的案件信息。友情提示,如果频繁爬取该网站,需扩充用户代理池。

五、推荐内容

1、常见反爬策略与反爬攻克手段介绍

数据的隐藏可以算是一种反爬策略之一,抓包分析是该反爬策略常见的反爬攻克手段。

当然,反爬还有很多手段,比如通过IP限制、UA限制、验证码限制...等等。

2、如何深入学习Python网络爬虫(深入学习路线介绍)


通过上述的介绍,相信对网络爬虫已经有了基础的了解,以及能够写出一些简单的爬虫项目。

以下项目可以提供练习:

  • 淘宝商品图片爬虫项目

  • 淘宝商品爬虫项目

3、关于Python爬虫,推荐书籍


《Python程序设计基础实战教程》 . 清华大学出版社.2018年

《精通Python网络爬虫》.机械工业出版社.2017年4月

end

实战:阿里巴巴 DevOps 转型后的运维平台建设

【干货合集】Java其实很好学,但你需要知道在“爪哇”的世界里“你究竟在哪?”

利用Python实现卷积神经网络的可视化

如何避免HBase写入过快引起的各种问题

更多精彩

点击“阅读原文”阅读详细内容!

如何快速掌握Python数据采集与网络爬虫技术相关推荐

  1. python数据采集有哪些技术_如何快速掌握Python数据采集与网络爬虫技术

    一.数据采集与网络爬虫技术简介 网络爬虫是用于数据采集的一门技术,可以帮助我们自动地进行信息的获取与筛选.从技术手段来说,网络爬虫有多种实现方案,如PHP.Java.Python ....那么用pyt ...

  2. 如何快速掌握 Python 数据采集与网络爬虫技术

    摘要: 本文详细讲解了 python 网络爬虫,并介绍抓包分析等技术,实战训练三个网络爬虫案例,并简单补充了常见的反爬策略与反爬攻克手段.通过本文的学习,可以快速掌握网络爬虫基础,结合实战练习,写出一 ...

  3. python3.7快速入门_PYTHON 3.7网络爬虫快速入门

    Python 3.7正在成为目前流行的编程语言,而网络爬虫又是Python网络应用中的重要技术,二者的碰撞产生了巨大的火花.本书在这个背景下编写而成,详细介绍Python 3.7网络爬虫技术. 本书分 ...

  4. python数据采集系统_基于python的聚焦网络爬虫数据采集系统设计与实现

    基于 python 的聚焦网络爬虫数据采集系统设计与实现 杨国志 ; 江业峰 [期刊名称] < <科学技术创新> > [年 ( 卷 ), 期] 2018(000)027 [摘要 ...

  5. python从零基础到项目实战怎么样-Python 3.x网络爬虫从零基础到项目实战

    ● 案例完整 本书中的所有案例都是通过"理论讲解 + 环境搭建 + 完整代码及分析 + 运行结果"这种完善的结构进行讲解的.此外,复杂的案例配有项目结构图,有难度的案例还分析了底层 ...

  6. 基于python的影评数据分析_基于Python聚焦型网络爬虫的影评获取技术

    龙源期刊网 http://www.qikan.com.cn 基于 Python 聚焦型网络爬虫的影评获取技 术 作者:郭向向 郑嘉慧 苗学芹 来源:<时代金融> 2019 年第 11 期 ...

  7. python网络爬虫技术-基于Python的网络爬虫技术综述

    汪洋 姜新通 [摘 要]人类社会已经进入大数据时代,这正在改变着我们的工作和生活.随着互联网的兴起和发展,同时也产生了各种对人类有价值的数据.快速搜索数据和充分利用数据信息已成为一个巨大挑战.这样的需 ...

  8. 用python如何写网络爬虫?

    前言 这本书我是真的强烈推荐的. 本书讲解了如何使用 Python 来编写网络爬虫程序,内容包括网络爬虫简介,从页面中抓取数据的三种方法,提取缓存中的数据,使用多个线程和进程来进行并发抓取,如何抓取动 ...

  9. python爬虫简单实例-Python 利用Python编写简单网络爬虫实例3

    利用Python编写简单网络爬虫实例3 by:授客 QQ:1033553122 实验环境 python版本:3.3.5(2.7下报错 实验目的 获取目标网站"http://bbs.51tes ...

最新文章

  1. apache tomcat下32还是64_JDK和Tomcat安装和配置的图文教程
  2. Linux Namespace系列(01):Namespace概述
  3. 四十七、Ansible自动化入门
  4. Angular reducer第一次被框架调用的单步调试细节
  5. Django10:Ajax介绍/发送数据/SweetAlert
  6. UI标签库专题十:JEECG智能开发平台 Form(form标签)
  7. QtCreator格式化代码---Beautifier插件使用方式
  8. HTTP摘要认证原理以及HttpClient4.3实现
  9. 零知识证明在匿名投票中的应用
  10. 用域代码任何带圈字符都能做出来
  11. XCode怎么搜索图片文件
  12. 软件测试用例设计包括哪些类型?
  13. 透视投影的原理和实现
  14. 计算机技术在生物学中的应用题库,2018年第二军医大学基础医学部816计算机在生物医学中的应用之生物化学考研基础五套测试题...
  15. linux的yum是什么意思,yum是什么?(linux命令)
  16. matlab 鲁棒性分析,电液速度系统的鲁棒性分析及MATLAB计算
  17. 【Java 8 新特性】Java Stream 通过min()和max()获取列表最小值和最大值
  18. QNX Hypervisor —— 体系结构
  19. Python爬取摩拜单车位置信息
  20. easyExcel导出excel文件并打包成zip压缩包下载

热门文章

  1. python kivy 手势识别基本代码
  2. C++ 重载函数和重载运算符
  3. 什么是 Toll-Free Bridging
  4. win7如何调整计算机c盘,两种解决win7c盘越来越小的技巧
  5. <input type = “button“>和<button></button>的区别
  6. c语言上机试题8,计算机考试二级C语言上机试题上[8]
  7. NOIP 2014 飞扬的小鸟
  8. JavaEE系统架构师学习路线(基础篇)
  9. @Before, @BeforeClass, @BeforeEach 和 @BeforeAll之间的不同
  10. c++ ODBC使用