码迷,mamicode.com
首页 > 编程语言 > 详细

在python3中使用urllib.request编写简单的网络爬虫

时间:2017-05-10 18:52:06      阅读:216      评论:0      收藏:0      [点我收藏+]

标签:成功   res   简单   根据   网页   targe   class   find   str   

转自:http://www.cnblogs.com/ArsenalfanInECNU/p/4780883.html

 

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.........."

 

 1 import urllib.request
 2 import re
 3 def getHtml(url):
 4     #print("正在打开网页并获取....")
 5     page=urllib.request.urlopen(url)
 6     Html=str(page.read())
 7     print("成功获取....")
 8     return Html
 9 def getImg(html):
10     img_re=re.compile(r(?<=src=")\S+?jpg)
11     #img_re=re.compile(r‘src="(.*?\.jpg)"‘)
12     print("the type of html is :",type(html))
13     img_list=img_re.findall(html)
14     print("len(img_list)=",len(img_list))
15     print("img_list[0]=",img_list[0])
16     print("正在下载图片......")
17     for i in range(len(img_list)):
18         print("img_list[%d]=%s" % (i,img_list[i]))
19         urllib.request.urlretrieve(img_list[i],%s.jpg % i)
20     print("完成图片下载......")
21     print("一共抓到了%d张图片" % len(img_list))
22 if __name__=="__main__":
23     url_baidu="http://tieba.baidu.com/f?kw=%B0%A2%C9%AD%C4%C9"
24     html=getHtml(url_baidu)
25     getImg(html)

 

在python3中使用urllib.request编写简单的网络爬虫

标签:成功   res   简单   根据   网页   targe   class   find   str   

原文地址:http://www.cnblogs.com/shenckicc/p/6837409.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!