文章导读:
这个是我自己动手开发的。我首先使用书上python3.5版本环境进行测试,然后使用我们学的python2.7进行论证。因为只是环境的问题,我相信都会得到解决,而且能更好的理解两者环境之间的区别。
在实际操作过程中,发现书籍跟写的代码之间的区别,发现写出代码的形式不一样,并且放在pycharm运营的时候总是觉得很诡异。那么我就从这讲解一下urllib和urllib2,同时做个小项目。
本文解决问题:
1、图片爬虫的实例分析
2、urllib和urllib2的区别以及案例
3、回顾简单python指令
urllib和urllib2的区别:
1、urllib只能根据url爬取,不能设置头信息,但可以对url进行编码;urllib2可以设置request请求头信息
2、urllib2模块直接导入就可以用,在python3中urllib2被改为urllib.request
======================1、图片爬虫梳理:======================
1、目标:进行京东商城手机图片的爬取
2、分析:肯定要通过循环遍历的方式,
以下是第一页、第二页、第三页的url地址:
发现是通过url进行识别的,即GET请求,其中page字段是有规律的page对应的数字是2n-1,s这个其实不管用,会跟着动态变,只有page有规律。
https://search.jd.com/Search?keyword=%E6%89%8B%E6%9C%BA&enc=utf-8&qrst=1&rt=1&stop=1&vt=2&wq=%E6%89%8B%E6%9C%BA&cid2=653&cid3=655&page=1&s=46&click=0
https://search.jd.com/Search?keyword=%E6%89%8B%E6%9C%BA&enc=utf-8&qrst=1&rt=1&stop=1&vt=2&wq=%E6%89%8B%E6%9C%BA&cid2=653&cid3=655&page=3&s=57&click=0
https://search.jd.com/Search?keyword=%E6%89%8B%E6%9C%BA&enc=utf-8&qrst=1&rt=1&stop=1&vt=2&wq=%E6%89%8B%E6%9C%BA&cid2=653&cid3=655&page=5&s=113&click=0
3、通过
urllib.request.urlretrieve() 将对应链接图片地址保存到本地
4、信息过滤第一次,只要中间商品列表中的数据
查看源代码,锁定开始标志和结束标志
<div class="p-img">
<div class="p-scroll">
pat1='<div class="p-img".+?<div class="p-scroll">' 过滤构造,那么我们只取中间的代码,将外面的代码进行过滤
5、信息过滤第2次,提取图片链接
我们发现格式是一样的,除了图片地址不一样。我们就要构造一个提取图片的函数
pat2 = '<img class="err-product" data-img="1" src="//(.+?\.jpg)" width="220" height="220">'
代码如下:
============================2、区别案例=============================
urllib2里面没有urlretrieve方法,所以用这种方法进行下载文件到本地是不可取的
我们发现在python2中,内置的有urllib、urllib2,只是说urllib2不具备使用urlretrieve方法进行下载文件到本地
urllib.encode()的使用
urlencode()里面必须是字典类型
# _*_ coding:utf-8 _*_
import urllib
dic = {'derek':'编码'}
print urllib.urlencode(dic) #derek=%E7%BC%96%E7%A0%81
m = urllib.urlencode(dic)
print urllib.unquote(m) #derek=编码
一般HTTP请求提交数据,需要编码成 URL编码格式,然后做为url的一部分,或者作为参数传到Request对象中。
GET请求一般用于我们向服务器获取数据,比如说,我们用百度搜索知乎:https://www.baidu.com/s?wd=知乎
发现GEThttps://www.baidu.com/s?wd=%E7%9F%A5%E4%B9%8E,后面是一个长长的字符串,urldecode后发现就是知乎