爬虫笔记 2.爬取某贴吧的帖子里面的图片

此教程为在某吧里面爬取某个页面的所有的图片

1.首先,老样子,我们要先将我们的爬虫变得更像一个人。

首先用谷歌浏览器打开我们所需要爬取的界面在这里插入图片描述
然后进行元素的审查(浏览器都是按f12),打开里面的Network,点击左边的第一个,然后将右边的Header往下拉,找到User-Agent这个值(这个值的目的是为了应对简单的反扒机制,有的网页会进行监测,普通的python在User-Agent这一块显示的是python的详细信息),记录下User-Agent的值。

在这里插入图片描述

2.进行python代码的准备工作

首先导入我们所需要的库文件(urllib.request是每个网络爬虫必须要使用到的库,而re这个库是为了使用正则表达式,这样可以保证爬取的难度降低。)

import urllib.request
import re

紧接着,我们先将我们的整个网页爬取下来。其中,这个add_header的值就是将我们的User-Agent的值导入到req里面去,这样就保证了我们的爬虫看上去更像是一个人的操作。附:这里面的url就是我们要爬取的网页的网页地址

def open_url(url):
    req = urllib.request.Request(url)
    req.add_header('User-Agent','Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.97 Safari/537.36')
    page=urllib.request.urlopen(req)
    html=page.read().decode('utf-8')

    return html
3.进行对爬下来的页面进行处理并将图片进行下载(以达到网络爬虫的目的)

这里面的p是为了找到图片的位置,我们先将其放在这个地方,然后re.findall这个函数是为了找到网页里面符合p条件的所有图片(以便确定到所有的图片的地址)。附:re.findall这个函数返回的是一个列表,里面包含着所有的地址。

def get_img(html):
    p=
    imglist=re.findall(p,html)
    for each in imglist:
        print(each)

我们继续对页面进行审查。在这里插入图片描述
我们对页面进行审查后,找到了图片的位置,我们将其前面的值复制下来给到p,这样方便定位。代码为:

def get_img(html):
    p=r'<img class="BDE_Image" pic_type="\d" width="\d\d\d" height="\d\d\d" src="([^"]+\.jpg)"'
    imglist=re.findall(p,html)
    for each in imglist:
        print(each)

注意,这里面的for循环还不是爬取,只是为了确定我们的代码能够运行且运行时正常的。
注意,p里面有一个亮点,在src里面,我们使用到了(),这个小括号是为了帮助我们直接定位到src,如果我们不使用的话,会返回这个图片的很多信息(我们下载图片只需要知道它的地址就可以了,其它的都是无用的信息。),详细用法可以百度一下python里面正则表达式的用法(爬虫里面正则表达式相当重要,相当重要,相当重要,重要的事说三遍)
如果运行这个函数,能够得到下面类似的结果,则表明我们的爬取是成功的。

在这里插入图片描述
然后我们得到了图片的地址,我们再将图片的数据保存到本地就ok啦。(urllib.request库里面的urlretrieve函数可以将文件保存下来。)
全部代码为:

import urllib.request
import re


def open_url(url):
    req = urllib.request.Request(url)
    req.add_header('User-Agent','Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.97 Safari/537.36')
    page=urllib.request.urlopen(req)
    html=page.read().decode('utf-8')

    return html


def get_img(html):
    p=r'<img class="BDE_Image" pic_type="\d" width="\d\d\d" height="\d\d\d" src="([^"]+\.jpg)"'
    imglist=re.findall(p,html)
    '''
    for each in imglist:
        print(each)
    '''
    for each in imglist:
        filename=each.split("/")[-1]
        urllib.request.urlretrieve(each,filename,None)
    

if __name__=='__main__':
    url="https://tieba.baidu.com/p/6338324817"
    get_img(open_url(url))

运行效果为:
在这里插入图片描述
我们已经将这个页面的符合我们要求的图片都保存下来了(保存的路径楼主没有设置,默认是和代码在一个文件夹里面的),我们的筛选条件就是我们的p,通过p来定位到符合条件的图片。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值