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数据传送
上面的程序是最基本的网页抓取,现在大多数网站都是动态网页,需要你动态地传递参数给它,它做出对应的响应。所以,在访问时,我们需要传递数据给它。最常见的情况就是网页界面的登录注册功能.
数据传送分为 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()) 打印