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

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..........""或者出现下面的情况

234229_eS7m_405981.jpg

234230_MLvG_405981.jpg

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)


转载于:https://my.oschina.net/u/405981/blog/483141

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值