Python爬取网页的入门介绍

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

1.http是客户端(用户)和服务器(网站)请求和应答的标准(TCP)。
2.http工作过程
(1)客户端与 服务器建立连接。
(2)发送http请求
(3)服务器接到请求后,给予响应信息。
(4)释放连接TCP连接
(5)客户端接收服务器返回的信息,浏览器解析并显示网页。
3.爬虫过程
(1)发起请求
通过http库向目标站点发起请求,及发送一个request,请求可以包含额外的headers等信息。
(2)获取响应 内容
如果服务器能正常响应,会得到一个response,获得页面内容有HTML,json字符串,二进制数据

(3)解析内容
得到的内容可能是HTML,可以用正则表达式、网页解析库进行解析。可能是Json,可以直接转为Json对象解析,可能是二进制数据,可以做保存或者进一步的处理。
(4)保存数据
保存形式多样,可以存为文本,也可以保存至数据库,或者保存特定格式的文件。
4. 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方法提交的数据没有限制.
GET与POST请求在服务端获取请求数据方式不同,就是我们自己在服务端取请求数据的时候的方式不同了,这句废话昂。

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

爬取网页的基础知识-URL

URL是Uniform Resource Locator的缩写,即统一资源定位系统,也就是网址。
URL 遵守一种标准的语法,它由协议、主机名、域名、端口、路径、以及文件名这六个部分构成,
在这里插入图片描述

HTML与JavaScript基础-网页结构

1.网页一般由三部分组成,分别是 HTML(超文本标记语言)、CSS(层叠样式表)和 JScript(活动脚本语言)。
2.HTML是整个网页的结构,相当于整个网站的框架。带“<”、“>”符号的都是属于 HTML 的标签,并且标签都是成对出现的。
3.常见的标签如下:

<html>..</html> 表示标记中间的元素是网页
<body>..</body> 表示用户可见的内容
<div>..</div> 表示框架
<p>..</p> 表示段落
<li>..</li>表示列表
<img>..</img>表示图片
<h1>..</h1>表示标题
<a href="">..</a>表示超链接


4.CSS
CSS 表示样式,<style type="text/css">表示下面引用一个 CSS,在 CSS 中定义了外观。
5. JScript 表示功能。交互的内容和各种特效都在 JScript 中,JScript 描述了网站中的各种功能。
如果用人体来比喻,HTML 是人的骨架,并且定义了人的嘴巴、眼睛、耳朵等要长在哪里。CSS 是人的外观细节,如嘴巴长什么样子,眼睛是双眼皮还是单眼皮,是大眼睛还是小眼睛,皮肤是黑色的还是白色的等。JScript 表示人的技能,例如跳舞、唱歌或者演奏乐器等。

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

5.爬取网页的urllib库

1.urllib库
Python3.x标准库urllib提供了urllib.request、urllib.response、urllib.parse和urllib.error四个模块,很好地支持了网页内容读取功能。再结合Python字符串方法和正则表达式,可以完成一些简单的网页内容爬取工作,也是理解和使用其他爬虫库的基础。

  1. 使用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。
//1.读取并显示网页内容

>>> import urllib.request
>>> fp = urllib.request.urlopen(r'http://www.python.org')
>>> print(fp.read(100))              #读取100个字节
>>> print(fp.read(100).decode())     #使用UTF8进行解码
>>> fp.close()                       #关闭连接

//2.提交网页参数
//1)下面的代码演示了如何使用GET方法读取并显示指定url的内容。
>>> import urllib.request
>>> import urllib.parse
>>> params = urllib.parse.urlencode({
    
    'spam': 1, 'eggs': 2, 'bacon': 0})
>>> url = "http://www.musi-cal.com/cgi-bin/query?%s" % params
>>> with urllib.request.urlopen(url) as f:
    print(f.read().decode('utf-8'))
//2)使用POST方法提交参数并读取指定页面内容。
>>> import urllib.request
>>> import urllib.parse
>>> data = urllib.parse.urlencode({
    
    'spam': 1, 'eggs': 2, 'bacon': 0})
>>> data = data.encode('ascii')
>>> with urllib.request.urlopen("http://requestb.in/xrbl82xr",
                                data) as f:
    print(f.read().decode('utf-8'))
//3.使用HTTP代理访问页面

>>> import urllib.request
>>> proxies = {
    
    'http': 'http://proxy.example.com:8080/'}
>>> opener = urllib.request.FancyURLopener(proxies)
>>> with opener.open("http://www.python.org") as f:
    f.read().decode('utf-8')

猜你喜欢

转载自blog.csdn.net/weixin_43398418/article/details/110691710