网络爬虫--6.urllib库的基本使用(2)

文章目录

  • 一. urllib.parse.urlencode()和urllib.parse.unquote()
  • 二. Get方式
  • 三. 批量爬取百度贴吧数据
  • 四.POST方式
  • 五.关于CA
  • 六.处理HTTPS请求 SSL证书验证

一. urllib.parse.urlencode()和urllib.parse.unquote()

编码工作使用urllib.parse的urlencode()函数,帮我们将key:value这样的键值对转换成"key=value"这样的字符串

解码工作可以使用urllib.parse的unquote()函数。

# IPython3 中的测试结果
In [1]: import urllib.parse

In [2]: word = {
   "wd" : "传智播客"}

# 通过urllib.urlencode()方法,将字典键值对按URL编码转换,从而能被web服务器接受。
In [3]: urllib.parse.urlencode(word)  
Out[3]: "wd=%E4%BC%A0%E6%99%BA%E6%92%AD%E5%AE%A2"

# 通过urllib.unquote()方法,把 URL编码字符串,转换回原先字符串。
In [4]: print urllib.parse.unquote("wd=%E4%BC%A0%E6%99%BA%E6%92%AD%E5%AE%A2")
wd=传智播客

二. Get方式

一般HTTP请求提交数据,需要编码成 URL编码格式,然后做为url的一部分,或者作为参数传到Request对象中。

GET请求一般用于我们向服务器获取数据,比如说,我们用百度搜索传智播客:https://www.baidu.com/s?wd=传智播客

浏览器的url会跳转成如图所示:

网络爬虫--6.urllib库的基本使用(2)_第1张图片
在其中我们可以看到在请求部分里,http://www.baidu.com/s? 之后出现一个长长的字符串,其中就包含我们要查询的关键词传智播客,于是我们可以尝试用默认的Get方式来发送请求。

import urllib.parse
import urllib.request

url = "http://www.baidu.com/s"
word = {
   "wd":"传智播客"}
# 转换成url编码格式(字符串)
word = urllib.parse.urlencode(word)
# url首个分隔符就是 ?
newurl = url + "?" + word

headers={
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36"}

request = urllib.request.Request(newurl, headers=headers)

response = urllib.request.urlopen(request)

print (response.read())

三. 批量爬取百度贴吧数据

首先我们创建一个python文件,我们要完成的是,输入一个百度贴吧的地址,比如:

百度贴吧LOL吧第一页:http://tieba.baidu.com/f?kw=lol&ie=utf-8&pn=0

第二页: http://tieba.baidu.com/f?kw=lol&ie=utf-8&pn=50

第三页: http://tieba.baidu.com/f?kw=lol&ie=utf-8&pn=100

发现规律了吧,贴吧中每个页面不同之处,就是url最后的pn的值,其余的都是一样的,我们可以抓住这个规律。简单写一个小爬虫程序,来爬取百度LOL吧的所有网页。

  1. 步骤一:先写一个main,提示用户输入要爬取的贴吧名,并用urllib.urlencode()进行转码,然后组合url,假设是lol吧,那么组合后的url就是:http://tieba.baidu.com/f?kw=lol

  2. 步骤二:接下来,我们写一个百度贴吧爬虫接口,我们需要传递3个参数给这个接口, 一个是main里组合的url地址,以及起始页码和终止页码,表示要爬取页码的范围。

  3. 步骤三:我们已经之前写出一个爬取一个网页的代码。现在,我们可以将它封装成一个小函数loadPage,供我们使用。

  4. 步骤四:最后如果我们希望将爬取到了每页的信息存储在本地磁盘上,我们可以简单写一个存储文件的接口。

你可能感兴趣的:(网络爬虫)