Python网络爬虫

爬虫简介

  • 是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁、自动索引、模拟程序或者蠕虫。
  • 请求网站并提取数据的自动化程序

爬取网页的基础知识-HTTP协议

  • 在1990年,HTTP就成为WWW的支撑协议。当时由其创始人WWW之父蒂姆·贝纳斯·李(TimBerners—Lee)提出,随后WWW联盟(WWW Consortium)成立,组织了IETF(Internet Engineering Task Force)小组进一步完善和发布HTTP协议。http是一个简单的请求-响应协议,它通常运行在TCP之上。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。请求和响应消息的头以ASCII码形式给出;而消息内容则具有一个类似MIME的格式。这个简单模型是早期Web成功的有功之臣,因为它使开发和部署非常地直截了当。

HTTP协议概述

  • HTTP协议是基于B/S架构进行通信的,而HTTP协议的服务器端实现程序有httpd、nginx等,其客户端的实现程序主要是Web浏览器,例如Firefox、InternetExplorer、Google
    chrome、Safari、Opera等,此外,客户端的命令行工具还有elink、curl等。Web服务是基于TCP的,因此为了能够随时响应客户端的请求,Web服务器需要监听在80/TCP端口。这样客户端浏览器和Web服务器之间就可以通过HTTP协议进行通信了。

HTTP工作过程

(1)客户与服务器建立连接;
(2)客户向服务器提出请求;
(3)服务器接受请求,并根据请求返回相应的文件作为应答;
(4)客户与服务器关闭连接。

HTTP工作过程

  • HTTP协议是基于请求/响应范式的。一个客户机与服务器建立连接后,发送一个请求给服务器,请求方式的格式为,统一资源标识符、协议版本号,后边是MIME信息包括请求修饰符、客户机信息和可能的内容。服务器接到请求后,给予相应的响应信息,其格式为一个状态行包括信息的协议版本号、一个成功或错误的代码,后边是MIME信息包括服务器信息、实体信息和可能的内容。其实简单说就是任何服务器除了包括HTML文件以外,还有一个HTTP驻留程序,用于响应用户请求。

爬虫过程

  • 发起请求
    通过HTTP库向目标站点发起请求,即发送一个Request,请求可以包含额外的headers等信息,等待服务器响应。
  • 获取响应内容
    如果服务器能正常响应,会得到一个Response,获得的页面内容有Html,Json字符串,二进制数据(如图片,视频等)
  • 解析内容
    得到的内容可能是HTML,可以用正则表达式、网页解析库进行解析。可能是Json,可以直接转为Json对象解析,可能是二进制数据,可以做保存或者进一步的处理。
  • 保存数据
    保存形式多样,可以存为文本,也可以保存至数据库,或者保存特定格式的文件。

Request与Response

(1)浏览器就发送消息给该网址所在的服务器,这个过程叫做HTTP Request。
(2)服务器收到浏览器发送的消息后,能够根据浏览器发送消息的内容,做相应处理,然后把消息回传给浏览器。这个过程叫做HTTP Response。
(3)浏览器收到服务器的Response信息后,会对信息进行相应处理,然后展示。

爬取网页的基础知识-HTTP请求方法

  • HTTP1.0 定义了三种请求方法: GET, POST 和 HEAD方法。
  • HTTP1.1 新增了六种请求方法:OPTIONS、PUT、PATCH、DELETE、TRACE 和 CONNECT 方法。
    GET提交的数据会放在URL之后,也就是请求行里面,以?分割URL和传输数据,参数之间以&相连,如EditBook?name=test1&id=123456.(请求头里面那个content-type做的这种参数形式,后面讲) POST方法是把提交的数据放在HTTP包的请求体中.
    GET提交的数据大小有限制(因为浏览器对URL的长度有限制),而POST方法提交的数据没有限制.

爬取网页的基础知识-HTTP状态码

  • 所有HTTP响应的第一行都是状态行,依次是当前HTTP版本号,3位数字组成的状态代码,以及描述状态的短语,彼此由空格分隔。
    在这里插入图片描述

爬取网页的基础知识-URL

在WWW上,每一信息资源都有统一的且在网上唯一的地址,该地址就叫URL(Uniform Resource Locator,统一资源定位器),它是WWW的统一资源定位标志,就是指网络地址。
URL由三部分组成:资源类型、存放资源的主机域名、资源文件名。
也可认为由4部分组成:协议、主机、端口、路径
在这里插入图片描述

HTML与JavaScript基础-网页结构

1.网页一般由三部分组成,分别是 HTML(超文本标记语言)、CSS(层叠样式表)和 JScript(活动脚本语言)。
2.HTML是整个网页的结构,相当于整个网站的框架。带“<”、“>”符号的都是属于 HTML 的标签,并且标签都是成对出现的。
3.常见的标签如下
在这里插入图片描述
4.CSS
CSS 表示样式,<style type="text/css">表示下面引用一个 CSS,在 CSS 中定义了外观。
5. JScript 表示功能。交互的内容和各种特效都在 JScript 中,JScript 描述了网站中的各种功能。
如果用人体来比喻,HTML 是人的骨架,并且定义了人的嘴巴、眼睛、耳朵等要长在哪里。CSS 是人的外观细节,如嘴巴长什么样子,眼睛是双眼皮还是单眼皮,是大眼睛还是小眼睛,皮肤是黑色的还是白色的等。JScript 表示人的技能,例如跳舞、唱歌或者演奏乐器等。

爬虫的合法性

每一个网站都有一个名为 robots.txt 的文档,当然也有部分网站没有设定 robots.txt。对于没有设定 robots.txt 的网站可以通过网络爬虫获取没有口令加密的数据,也就是该网站所有页面数据都可以爬取。如果网站有 robots.txt 文档,就要判断是否有禁止访客获取的数据
在这里插入图片描述

爬取网页的urllib库

1.urllib库
Python3.x标准库urllib提供了urllib.request、urllib.response、urllib.parse和urllib.error四个模块,很好地支持了网页内容读取功能。再结合Python字符串方法和正则表达式,可以完成一些简单的网页内容爬取工作,也是理解和使用其他爬虫库的基础。
2. 使用urllib库获取网页信息
使用 urllib.request.urlopen()函数可以打开一个网站,读取并打印网页信息。
urllib.urlopen(url, data[, proxies])
urlopen()函数返回response对象
函数的参数url表示远程数据的路径;data表示提交到url的数据;proxies用于设置代理。
response对象的方法
info()方法: 返回一个httplib.HTTPMessage对象。
getcode()方法:返回HTTP状态码。如果是HTTP请求,200表示请求成功完成,404表示网址未找到。
geturl():返回请求的url。

urllib的基本应用

1.读取并显示网页内容
在这里插入图片描述
2.提交网页参数
(1)下面的代码演示了如何使用GET方法读取并显示指定url的内容。
在这里插入图片描述
(2)使用POST方法提交参数并读取指定页面内容。
在这里插入图片描述
3.使用HTTP代理访问页面
在这里插入图片描述

urllib爬虫案例

爬取公众号文章中的图片。

  • 第1步 确定公众号文章的地址,以微信公众号“Python小屋”里的一篇文章为例,文章标题为“报告PPT(163页):基于Python语言的课程群建设探讨与实践”,地址为:

https://mp.weixin.qq.com/s?__biz=MzI4MzM2MDgyMQ==&mid=2247486249&idx=1&sn=a37d079f541b194970428fb2fd7a1ed4&chksm=eb8aa073dcfd2965f2d48c5ae9341a7f8a1c2ae2c79a68c7d2476d8573c91e1de2e237c98534&scene=21#wechat_redirect

  • 第2步 在浏览器(以Chrome为例)中打开该文章,然后单击鼠标右键,选择“查看网页源代码”,分析后发现,公众号文章中的图片链接格式为:
    在这里插入图片描述
  • 第3步 根据前面的分析,确定用来提取文章中图片链接的正则表达式:

pattern = ‘data-type=“png” data-src="(.+?)"’

  • 第4步 编写并运行Python爬虫程序,代码如下:
    在这里插入图片描述

爬取网页的requests库

  1. requests库概述
    简洁的处理HTTP请求的第三方库,建立在Python的urllib3库基础上,是对urllib3库的再封装。
  • requests库包括URL获取、HTTP长连接和连接缓存、自动内容解码、文件分块上传、连接超时处理、流数据下载等功能。
  1. requests库解析
  • requests库的requests.get()方法功能是网络爬虫和信息提交
    res=requests.get(url[,timeout=n])
  • 该函数返回的网页内容会保存为一个response对象。参数url必须采用HTTP或HTTPS方式访问,可选参数timeout用于设定每次请求超时时间。
  • requests.get() 返回的response对象代表响应。response对象的主要属性如下。
    ● statuscode:返回HTTP请求的状态,200表示连接成功,404表示失败。
    ● text:HTTP响应内容的字符串形式,即url对应的页面内容。
    ● encoding:HTTP响应内容的编码方式。
    ● content:HTTP响应内容的二进制形式。
    Response对象提供了两个方法。
  • json():如果HTTP响应内容包含JSON格式数据,则该方法解析JSON数据。
  • raise_for_status():如果status_code值不是200,则产生异常。

requests基本操作

(1)增加头部并设置访问代理
在这里插入图片描述
(2)访问网页并提交数据
在这里插入图片描述
application/json; charset=utf-8
在这里插入图片描述
gzip

(3)获取和设置cookies
使用get()方法获取网页信息时cookies属性的用法:
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值