在python3中使用urllib.request编写简单的网络爬虫
2015-07-23 00:00
931 查看
Python官方提供了用于编写网络爬虫的包 urllib.request, 我们主要用它进行打开url,读取url里面的内容,下载里面的图片。
分以下几步:
step1:用urllib.request.urlopen打开目标网站
step2:由于urllib.request.urlopen返回的是一个http.client.HTTPResponse object,无法直接读取里面的内容,所以直接调用该对象的方法read(),获取到页面代码,存到html里
step3:构建正则表达式,从页面代码里提取出图片url地址。
step4:根据图片url地址,用urllib.request.retrieve下载到本地
容易出错的地方:
1:python2.x和python3.x中,urlopen具体在哪个包里是不一样的。如果你要在python2.x上实现,要自行百度正确的包。
2:最容易出错的地方是正则表达式,容易出现匹配错误。我程序里写的正则表达式,在目前的网址里是正确的,如果是其他网址可能还会出问题,要具体问题具体分析,去debug。
比如如果img_re=re.compile(r'(?<=src=)"\w+?jpg"')的话,会匹配成""http://tieba..........""或者出现下面的情况
分以下几步:
step1:用urllib.request.urlopen打开目标网站
step2:由于urllib.request.urlopen返回的是一个http.client.HTTPResponse object,无法直接读取里面的内容,所以直接调用该对象的方法read(),获取到页面代码,存到html里
step3:构建正则表达式,从页面代码里提取出图片url地址。
step4:根据图片url地址,用urllib.request.retrieve下载到本地
容易出错的地方:
1:python2.x和python3.x中,urlopen具体在哪个包里是不一样的。如果你要在python2.x上实现,要自行百度正确的包。
2:最容易出错的地方是正则表达式,容易出现匹配错误。我程序里写的正则表达式,在目前的网址里是正确的,如果是其他网址可能还会出问题,要具体问题具体分析,去debug。
比如如果img_re=re.compile(r'(?<=src=)"\w+?jpg"')的话,会匹配成""http://tieba..........""或者出现下面的情况
import urllib.request import re def getHtml(url): #print("正在打开网页并获取....") page=urllib.request.urlopen(url) Html=str(page.read()) print("成功获取....") return Html def getImg(html): img_re=re.compile(r'(?<=src=")\S+?jpg') #img_re=re.compile(r'src="(.*?\.jpg)"') print("the type of html is :",type(html)) img_list=img_re.findall(html) print("len(img_list)=",len(img_list)) print("img_list[0]=",img_list[0]) print("正在下载图片......") for i in range(len(img_list)): print("img_list[%d]=%s" % (i,img_list[i])) urllib.request.urlretrieve(img_list[i],'%s.jpg' % i) print("完成图片下载......") print("一共抓到了%d张图片" % len(img_list)) if __name__=="__main__": url_baidu="http://tieba.baidu.com/f?kw=%B0%A2%C9%AD%C4%C9" html=getHtml(url_baidu) getImg(html)
相关文章推荐
- GetMssage()和WSAAsyncSelect()捕获网络事件消息
- HTTP协议与HTTP表单传输格式,再论get、post方法
- http get(swift and oc)
- linux程序设计——主机字节序和网络字节序(第十五章)
- HTTP协议 (一) HTTP协议详解
- 一些在JAVA中获得文件夹路径的方法http://www.cnblogs.com/lostyue/archive/2011/06/27/2091686.html
- 德国精品软件 Throttle 网络加速软件
- 德国精品软件 Throttle 网络加速软件
- 德国精品软件 Throttle 网络加速软件
- 关于 WEB/HTTP 调试利器 Fiddler 的一些技巧分享
- 计算机网络
- TCP/UDP简易通信
- Android Asynchronous Http Client 中文教程
- 网络编程基础知识
- 【工业串口和网络软件通讯平台(SuperIO)教程】三.二次开发流程
- 【工业串口和网络软件通讯平台(SuperIO)教程】三.二次开发流程
- Https要点
- 网络基础知识--网络架构及OSI七层协议
- 无线网络安全--BackTrack 的U盘启动盘制作
- 封装http请求返回统一json格式数据的网络操作