Python3爬虫(一)抓取网页的html

因为代码只有几行,所以可以先贴代码:

import  urllib.request
url = r'http://douban.com'
res = urllib.request.urlopen(url)
html = res.read().decode('utf-8')
print(html)

第一行,导入 urllib库的request模块

第二行,指定要抓取的网页url,必须以http开头的

第三行,调用 urlopen()从服务器获取网页响应(respone),其返回的响应是一个实例

第四行,调用返回响应示例中的read()函数,即可以读取html,但需要进行解码,具体解码写什么,要在你要爬取的网址右键,查看源代码,

Python3爬虫(一)抓取网页的html_第1张图片

红框中的 charset= 则表示编码格式,我要爬取的网页编码为 utf-8,所以,解码我也填utf-8,如果是gbk2313,则填写的是GBK


(更为简单的方法是在程序中调用info()获取网页头部来查看编码方式:)

查看网页的头部信息以确定网页的编码方式:

import urllib.request

res = urllib.request.urlopen('http://www.163.com')
print(res.info())  #info()方法 用来获取网页头部
执行结果:

Python3爬虫(一)抓取网页的html_第2张图片
可以看出次网页的编码是 GBK。


第五行,打印就行。

但上面的写法是裸奔型写法,就是没有头部的,有一些网页你没有头部是不能访问的,会返回 403错误。



最正式的做法是仿照http的过程,在用爬虫获取网页的时候,加入头部,伪装成浏览器。

Http 其实就是 请求/响应模式,永远都是 客户端向服务端发送请求,然后服务端再返回响应。


有一个问题就是 头部改怎么加?可以打开你的浏览器,按F12,(我用的是谷歌浏览器)

F12打开开发者工具模式后,进入一个随便一个网页,开发者工具就会有东西出现

Python3爬虫(一)抓取网页的html_第3张图片

双击name栏的任意一个,在Headers 一栏会有个 User-Agent ,复制蓝色部分,蓝色部分就是头部。再把蓝色部分加入到爬虫程序中,见下面代码:

这种方式是推荐的

import urllib.request

url = r'http://douban.com'
headers ={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36'}
req = urllib.request.Request(url=url,headers=headers)
res = urllib.request.urlopen(req)
html = res.read().decode('utf-8')
print(html)

注意:urllib.request.Request()用于向服务端发送请求,就如 http 协议客户端想服务端发送请求

而 urllib.request.urlopen()则相当于服务器返回的响应

你可能感兴趣的:(python3,#,爬虫)