python爬虫urllib使用B

1.分分钟扒一个网页下来

怎样扒网页呢?其实就是根据URL来获取它的网页信息,虽然我们在浏览器中看到的是一幅幅优美的画面,但是其实是由浏览器解释才呈现出来的,实质它是一段HTML代码,加 JS、CSS,如果把网页比作一个人,那么HTML便是他的骨架,JS便是他的肌肉,CSS便是它的衣服。所以最重要的部分是存在于HTML中的,下面我们就写个例子来扒一个网页下来。

</pre><pre name="code" class="python">#!usr/bin/python
import urllib.request   导入代码需要用到的方法

tmp = urllib.request.urlopen("https://www.baidu.com/")  定义想爬数据的网址
html = tmp.read()     定义另外一个变量为read(tmp)
print (html)         打印出定义的变量     so easy! you too,yes?

当然这里的网站不仅限制于百度,url是可以任意变动的,另外,因为python3的特性模块合并,所以导入需要特别注意导入 模块.方法
具体的可查看博客另外的文章.

urlopen接受三个参数,形式为 urlopen(url,data,timeout)
第一个参数url就是URL网址,第二个参数data是访问URL时需要传送的数据,第三个timeout是设置超时时间用的.
    第一个参数是必传参数;第二三个参数可以选择传送或不传送,data值默认为空None,timeout默认为 socket._GLOBAL_DEFAULT_TIMEOUT.


2.POST和GET数据传送

上面的程序是最基本的网页抓取,现在大多数网站都是动态网页,需要你动态地传递参数给它,它做出对应的响应。所以,在访问时,我们需要传递数据给它。最常见的情况就是网页界面的登录注册功能.

把账户用户名和密码数据传送到一个URL得到服务器的响应登录然后再爬取数据.


         数据传送分为 POST 和 GET 两种方式:
其中,POST方式不会再网址上显示参数,只会传递,用户只知道传了东西过去,而不知道传了什么过去;
GET方式则是直接以链接形式进行访问,链接中包含了所有需要传递的参数,但是传递的用户密码也会被显示。

                大部分情况下建议是POST形式。


POST方式举例:

#!/usr/bin/python
#encoding: utf-8    编码格式设置

import urllib.request    导入 模块方法
import urllib.parse

values = {'username':'test_soy','password':'*********'}    创建一个字典,包含需要传输的参数,此处以登录为例子
data = urllib.parse.urlencode(values)                      使用data作为变量,对字典内的参数进行编码转换为可用

url = urllib.parse.urlencode('https://passport.csdn.net/account/login?ref=toolbar')   使用url作为变量,并对参数进行编码转换
tmp = urllib.request.urlopen(url,data)                                                进行爬取过程
print(tmp.read())                                                                      打印出来

上述代码中,如果不进行编码转换,会出现 字符编码的报错,例如:

TypeError: POST data should be bytes or an iterable of bytes. It cannot be of type str.



GET方式举例:

#!/usr/bin/python
#encoding: utf-8

import urllib.request
import urllib.parse

values = {}                      变量设为字典
values['usrname'] = 'test_soy'
values['pasword'] = '********'   传参数
data = urllib.parse.urlencode(values)    对参数进行编码
url = urllib.parse.urlencode('https://passport.csdn.net/account/login?ref=toolbar') 对传入的str类型进行编码
tmp = urllib.request.urlopen(data +'?'+url)   http协议 
print (tmp.read())    打印




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值