Python爬虫(二)使用urllib来爬点东西

1、先爬一个网页下来看看吧
怎样扒网页呢?其实就是根据URL来获取它的网页信息,虽然我们在浏览器中看到的是优美有序的画面,但是其实是由浏览器解释才呈现出来的,实质它是一段HTML代码,加JS、CSS,下面我们就来扒一个网页下来看看。

# python 3
import urllib.request

response = urllib.request.urlopen("https://baidu.com")
print(response.read())

真正的程序就两行,把它保存成 demo.py,进入该文件的目录,执行Python demo.py命令查看运行结果吧。

2.分析扒网页的方法

第一行

response = urllib.request.urlopen("https://baidu.com")
首先我们调用的是urllib库里面的urlopen方法,传入一个URL,这个网址是百度首页,协议是HTTP协议.urlopen一般接受三个参数,它的参数如下:

urlopen(url, data, timeout)

第一个参数url即为URL,第二个参数data是访问URL时要传送的数据,第三个timeout是设置超时时间。
第二三个参数是可以不传送的,data默认为空None,timeout默认为 socket._GLOBAL_DEFAULT_TIMEOUT.
第一个参数URL是必须要传送的,在这个例子里面我们传送了百度的URL,执行urlopen方法之后,返回一个response对象,返回信息便保存在这里面。

第二行

print(response.read())

response对象有一个read方法,可以返回获取到的网页内容。
如果不加read直接打印会是什么呢?答案如下:

<http.client.HTTPResponse object at 0x02E05270>

直接打印出了该对象的描述,所以记得一定要加read方法,否则它不出来内容可就不怪我咯!

3.POST和GET数据传送

上面的程序演示了最基本的网页抓取,不过,现在大多数网站都是动态网页,需要你动态地传递参数给它,它做出对应的响应。所以,在访问时,我们需要传递数据给它。最常见的情况就是登录注册的时候呀。
把用户名和密码传送到一个URL,然后你得到服务器处理之后的响应,这个该怎么办?

数据传送分为POST和GET两种方式,两种方式最重要的区别是GET方式是直接以链接形式访问,链接中包含了所有的参数,当然如果包含了密码的话是一种不安全的选择,不过你可以直观地看到自己提交了什么内容。POST则不会在网址上显示所有的参数,不过如果你想直接查看提交了什么就不太方便了。

POST方式:
上面提到了data参数,它就是用在这里的,我们传送的数据就是这个参数data,下面演示一下POST方式。

import urllib.request,urllib.parse

values = {"username":"[email protected]","password":"XXXX"}
data = urllib.parse.urlencode(values) 
url = "https://passport.csdn.net/account/login?from=http://my.csdn.net/my/mycsdn"
response = urllib.request.urlopen(url,data)

print(response.read())

我们引入了urllib库,现在我们模拟登陆CSDN,当然上述代码可能登陆不进去,因为CSDN还有个流水号的字段,没有设置全,比较复杂在这里就不写上去了,在此只是说明登录的原理。一般的登录网站一般是这种写法。

我们需要定义一个字典,名字为values,参数我设置了username和password,下面利用urllib的urlencode方法将字典编码,命名为data,构建request时传入两个参数,url和data,运行程序,返回的便是POST后呈现的页面内容。

GET方式:

至于GET方式我们可以直接把参数写到网址上面,直接构建一个带参数的URL出来即可。

import urllib.request

values={}
values['username'] = "1016903103@qq.com"
values['password']="XXXX"
data = urllib.parse.urlencode(values) 
url = "http://passport.csdn.net/account/login"
geturl = url + "?"+data
response = urllib.request.urlopen(url)

print(response.read())

你可以打印输出一下url,发现其实就是原来的url加?然后加编码后的参数,
和我们平常GET访问方式一模一样,这样就实现了数据的GET方式传送。


———–到这里我们就已经了解了爬虫的一些基本使用,可以抓取到一些基本的网页信息啦~~~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章