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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
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)
|
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:在python3中使用urllib.request编写简单的网络爬虫 - Python技术站