python爬虫初试

今天使用了urllib模块简单的对百度首页做了爬取,就是简单的爬取html文件。
使用的是python3.7.x,编辑器用的是sublime_text3(其他编辑器也都一样,但是记事本不行)
对于urllib模块的理解也是加深了不少,先简单介绍一下urllib模块的几个常用的函数和类吧。

  • urllib.request
    这个是用来打开URL(主要是http)的类,里面包括了一些关于访问某个url的具体实现。

我们要用的就是一个urllib.request.urlopen()函数,所有的内容都是围绕这个函数展开的(虽然内容极少。。。第一次嘛,先简单体会一下)。
我们要做的很简单,就是把百度首页的html代码爬下来,然后存到文件里面。

#coding:utf-8
from urllib import request

#把爬取过程封装到一个函数里面,传入文件名称和url
def catch(filename, http):
	#使用urlopen函数访问该url
    response = request.urlopen(http)
    #把内容读入到html变量中,注意,这是html二进制数据
    html = response.read()
    #我们把这些数据进行解码
    html = html.decode('utf-8')
    #养成好习惯,用with来打开文件,以免到时候忘了关闭文件
    #注意要指定一下编码方式为utf-8,不然的话会出现很多问题
    with open(filename, 'w', encoding = 'utf-8') as f:
         f.write(html)

if __name__ == '__main__':
    catch('te.txt', 'http://www.baidu.com')

上面的代码有两个需要详细说的地方:
1.我们对数据进行解码的时候,也就是html = html.decode(‘utf-8’)这一步,具体依照你要爬的网页来确定,可以在浏览器中查看网页的源代码,在<head>标签里面一般都会指定编码格式,按照这个解码就行了,不过一般也不需要太注意,大多都是utf-8的编码方式。
2.我们将数据写入文件中的时候,提到了要制定编码方式,如果不指定为utf-8的话,在win10中,好像用的是ANSI,要知道html中的字符是不能用ANSI表示的,所以就会报错,制定好编码方式就没什么问题了。



接下来的内容需要一点网络基础(就一点点,了解一下浏览器访问网页的流程,以及一些关于请求,响应等一些概念就好,不用深入理解)

接下来系统介绍一下各个函数:
1.urllib.request.urlopen(url, data=None, [timeout, ]*, cafile=None, capath=None, cadefault=False, context=None)

参数:在此介绍三个常用的。

  • url:就是你要访问的网址。
  • data:在访问网址的时候要提交的数据,默认为None,如果有要提交的数据的话,urlopen会使用Post方式来提交(如果不明白post的话还请自行百度。。)
  • timeout:这个参数是设置访问超时的时间的,也就是网站的响应时间超过timeout参数的话判定为访问超时,然后就会停止访问该网页。

返回值:urlopen的返回值是一个http.client.HTTPResponse类型的实例对象。我们假设返回的是变量page,对于page,我们可以像读取文件那样直接读取内容,例如page.read(), page.readline()等等。但是要注意的是page中存放的都是二进制字节流。可以通过decode()解码,上面有用到过。
除此之外,page还有几个实用方法:

  • info(): 返回服务器返回的响应的头部信息,也是一个http.client.HTTPResponse对象
  • getcode():返回响应状态信息,200表示正常响应,404表示网址未找到
2.urllib.request.Request()

这个函数主要用来构造一个请求,可以将url,表单数据,提交方式等http头部信息当作参数传入其中,最终会得到一个http请求头,也就是urllib.request.Request对象。
举例子:

from urllib import request
# 要访问的url
url = r'http://www.baidu.com'
# 请求头
head = {'User-Agent':  "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv2.0.1) Gecko/20100101 Firefox/4.0.1"}
# 调用urllib.request.Request()构造请求头
request_url = request.Request(url = url, headers = head, method = 'POST')
# 调用urllib.request.urlopen()向服务器发送请求
page = request.urlopen(request_url)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值