初识Python2.7 urllib库
1.实现简单网页爬取,并将网页HTML写到本地磁盘
- 首先,爬取百度首页(http://www.baidu.com)将内容读取出来付给一个变量
- 以写入的方式打开一个本地文件,命名为*.html格式
-关闭该文件
*read() 读取文件的全部内容
readline()读取文件的一行
readlines()将读到的内容赋给一个列表变量*
#--coding:utf-8--
import urllib2
url='http://www.baidu.com'
file = urllib2.urlopen(url)
data = file.read()
out_put_stream = open("D:\\img\\crawlers/baidu_homepage.html", 'wb')
out_put_stream.write(data)
out_put_stream.close()
Python3可以用ulrlib.request.utlretrieve(url,path)直接实现不过要记得urlcleanup()清楚urlretrieve()的缓存
上述代码中file可以调用 info() getcode() geturl()得到相应信息
当爬取的网页URL中包含中文字符的时候需要进行编码处理在Python2中用urllib2.quote()进行编码 ,urllib2.unquote()解码
2.模拟浏览器访问
有些网站做了反爬处理 禁止爬虫访问 这时需要模拟浏览器进行爬取
模拟浏览器的方法是设置Headers中的User-Agent属性
User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3141.7 Safari/537.36
具体实现:
- 用build_opener()修改报头
由于urlopen()不支持HTTP的高级功能 所以需要修改报头
#--coding:utf-8--
import urllib2
url="http://blog.youkuaiyun.com/weiwei_pig/article/details/51178226"
headers=('User-Agent',"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3141.7 Safari/537.36")
opener=urllib2.build_opener()
#注意这里opener给add_handler赋值的方式 一个列表 不是函数调用
opener.add_handler=[headers]
infomation=opener.open(url).read()
print infomation
- Python3.x中可以用urllib.request.Request(url).add_header(‘User-Agent’,”xx”) 注意这里add_header()是函数调用
3.设置超时时间
有时候服务器响应很慢,可以设置超时时间,超过超时时间还没有响应就判断为网页无法打开
具体实现: urlopen(url,timeout=1) timeout的单位是秒
#--coding:utf-8--
import urllib2
ileageURL= urllib2.quote("http://yum.iqianyue.com")
print ileageURL
sinaURL= urllib2.unquote(ileageURL)
for i in range(1,100):
try:
file = urllib2.urlopen(sinaURL,timeout=1)
data = file.read()
print len(data)
except Exception as e:
print ("出现异常--"+str(e))
14165
14165
14165
14165
出现异常 urlopen error timed out
14165