python爬虫爬取贴吧图片的最简思路


仅作为记录,大佬请跳过。

1 引入包

import re  # re模块主要包含了正则表达式
import urllib.request

2 爬虫设置

2.1 设置headers

用于假装用户,使得爬虫被计算机认为是人的操作

headers = {
    
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36 Edg/87.0.664.75'}

2.2 设置网址

url="https://tieba.baidu.com/f?ie=utf-8&kw=%E7%8C%AB%E5%9B%BE&fr=search"

2.3 得到地址:“假用户”+网址,用变量page表示

page = urllib.request.Request(url, headers=headers)

2.4 获取地址中的数据

html=urllib.request.urlopen(page).read().decode("utf-8")

此html里面是网址里的所有源代码

3 图片设置

3.1 在网页源码里分析图片部分代码的组成,用reg表示

在这里插入图片描述

参照图

reg = r'bpic="(.+?\.jpg)" class'

3.2 从地址中的数据(所有源代码),获取所有reg结构

imgre = re.compile(reg)		# 先编译一下reg
imglist = re.findall(imgre, html)

imglist储存着所有源代码里符合reg结构的代码

3.3 保存图片

urllib.request.urlretrieve

x = 0
for imgurl in imglist:
    urllib.request.urlretrieve(imgurl, r'E:\python\cat\%s.jpg' % x)
    x += 1

分别将imglist里的每个reg图片元素(记为imgurl),保存到本地

所有源代码

import re  # re模块主要包含了正则表达式
import urllib.request
from urllib import request  # urllib模块提供了读取Web页面数据的接口


# 定义一个getHtml函数
def getHtml(url):
    print('start-gethtml')
    # page = urllib.request.urlopen(url)  # urllib.request.urlopen()方法用于打开一个URL地址
    # html = page.read()  # read()方法用于读取URL上的数据
    headers = {
    
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36 Edg/87.0.664.75'}
    page = urllib.request.Request(url, headers=headers)
    # page=requests.get(url, headers=headers)
    html=urllib.request.urlopen(page).read().decode("utf-8")
    return html


# 图片下载
def getImg(html):
    reg = r'bpic="(.+?\.jpg)" class'  # 正则表达式,得到图片地址
    imgre = re.compile(reg)  # re.compile() 可以把正则表达式编译成一个正则表达式对象.
    html = html  # python3
    imglist = re.findall(imgre, html)  # re.findall() 方法读取html 中包含 imgre(正则表达式)的数据
    # 把筛选的图片地址通过for循环遍历并保存到本地
    # 核心是urllib.request.urlretrieve()方法,直接将远程数据下载到本地,图片通过x依次递增命名
    x = 0
    for imgurl in imglist:
        urllib.request.urlretrieve(imgurl, r'E:\python\cat\%s.jpg' % x)
        x += 1


if __name__ == '__main__':
    html = getHtml("https://tieba.baidu.com/f?ie=utf-8&kw=%E7%8C%AB%E5%9B%BE&fr=search")
    print(getImg(html))

展示

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_41529093/article/details/113111169