python爬虫第一课:目标抓取:图片为例

一、实现访问网页
首先第一步是要实现python对网页的访问,直接上代码
代码如下:

import urllib.request
page=urllib.request.urlopen('http://tieba.baidu.com/p/1753935195')#打开网页
htmlcode=page.read()#读取网页代码
print(htmlcode)#在命令窗口输出代码
f=open('pagecode.txt','w')
f.write(str(htmlcode))
f.close()

结果如下:同时目录下出现了pagecode.txt文件
在这里插入图片描述

现在对其封装如下:

import urllib.request
def gethtmlcode(url):
    page=urllib.request.urlopen(url)#打开网页
    hcode=page.read()#读取网页代码
    return str(hcode)
htmlcode=gethtmlcode('http://tieba.baidu.com/p/1753935195')
print(htmlcode)#在命令窗口输出代码
f=open('pagecode1.txt','w')
f.write(htmlcode)
f.close()

如此就将目标网页代码成功获取了

二、提取目标:图片
首先,我可以预料到,你跟本不会有心情看乱七八糟的网页代码。
由此需要一个正则表达式如:reg = r’src="(.+?.jpg)"’
匹配以src="开头然后接多个字符以.jpg"结尾的字符串
其目的是从获得的网页代码中寻找满足上述正则表达式的字符串
接着 用python中的re库中的 re.findall(str) 来返回一个满足匹配的字符串组成的列表

reg = r'src="(http.+?\.jpg)" '#正则表达式
reg_img = re.compile(reg)
imglist = reg_img.findall(get_html('http://tieba.baidu.com/p/1753935195'))#进行匹配

上述源码将满足条件的字符串赋给了imglist
接着用代码urllib.request.urlretrieve(imglist,'文件路径‘)
这里需要注意的是文件路径中的文件夹路径必须是已有的,否则会返回
FileNotFoundError: [Errno 2] No such file or directory:
所以在进行目录创建前可以先建一个目录创建函数,其完整源码如下:

import urllib.request
import re
import os

def gethtmlcode(url):
    page=urllib.request.urlopen(url)#打开网页
    hcode=page.read()#读取网页代码
    return str(hcode)

def makefiledir(filedir):
    isexists=os.path.exists(filedir)#判断该目录是否存在
    if not isexists:
        os.makedirs(filedir)#创建目录
        return True
    else:
        print("该目录已存在,请另建!")
        return False

def getimg(url):
    reg = r'src="(http.+?\.jpg)"'#正则表达式
    reg_img = re.compile(reg)
    imglist=reg_img.findall(url)
    x=0
    filedir='E:/project design/python_project/webpac/bug/imag/'
    makefiledir(filedir)
    for img in imglist:
        a=img.rfind("<")
        b=len(img)
        if a>=0:#过滤不正确的字符串
            img=str(img)
            present=img[a:]
            print(a,b)
            print(img)
        else:
            x += 1
            urllib.request.urlretrieve(img, filedir+'G%s.jpg' % x)#批量操作
htmlcode=gethtmlcode('https://tieba.baidu.com/p/1753935195?red_tag=1220612178')
getimg(htmlcode)

其运行结果如下:
在这里插入图片描述

在这里插入图片描述

错误1:AttributeError: module ‘urllib’ has no attribute ‘urlopen’
源码:

import urllib
page=urllib.urlopen('http://tieba.baidu.com/p/1753935195')#打开网页
htmlcode=page.read()#读取网页代码
print(htmlcode)#在命令窗口输出代码

分析: Python3.X中应该用urllib.request

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值