爬虫爬取网络图片(正则表达详细版)

re式匹配

匹配类型

  • 导入库

import re

类型一(正则表达式匹配):
re.complie()
参数:
\d 表示 匹配数字
[m-n]表示匹配m到n区间内的数字,字母
{m,n} 该限定符的意思是至少有m个重复,至多有n个重复(数字长度最少为m+1,最长为n+1)
实例:[1-9]\d{4,10}表示匹配1到9区间的数字,至少有4个重复,最多有10个重复

类型二:
re.match()
匹配方式:从总字符串的第一个字符去对应要匹配的字符串(一 一对应,开头或者中间不同则之间匹配失败)
参数:字符串 ‘abc’

类型三:
re.search()
匹配方式:从总字符串的第一个字符去查找要匹配的字符串(存在则匹配成功)
参数:字符串 ‘abc’

类型四:
re.findall(pattern, String, flags=0)
参数:String为总字符串。
pattern = re.compile(es, re.S)
设置re.S则不会对\n进行中断
es为正则表达式

匹配代码

  • 类型一
import re
pattern = re.compile("[1-9]\d{4,10}")
Str = "我的qq号码为2324324666888"
lis = re.findall(pattern , Str , flags=0)
print(len(lis[0]))

运行结果:
[‘23243246668’]

  • 类型二
import re
line = "Cat are smarter than dogs"
matchObj = re.match(r'dogs', line)
if matchObj:
    print("match->matchObj.group():",matchObj.group())
else:
    print("No match!!")
searchObj = re.search(r'dogs', line)

运行结果:
No match!!

  • 类型三
import re
line = "Cat are smarter than dogs"
searchObj = re.search(r'dogs', line)
print(searchObj)
if searchObj:
    print("search->searchObj.group():",searchObj.group())
else:
    print("NO match!!")

运行结果:
<_sre.SRE_Match object; span=(21, 25), match=‘dogs’>
search->searchObj.group(): dogs

  1. 类型四

在匹配网页指定关键字和爬取图片模块

匹配网页指定关键字

本案列匹配的是百度首页个别中文字段匹配内容如图:
匹配字段
注意:
由于百度中的文字为js动态加载则,我们需要去先执行以下步骤:打开浏览器设置——>网站设置——>JavaScript——>将百度添加为禁止;如图:

js设置禁止

匹配详情

  1. 获取AU伪装
    UA

  2. 获取对应url
    url

  • 代码:
import re
import requests
if __name__ == '__main__':
	# UA伪装
    header = {
       'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36'
    }
   # 1.指定url
    url = 'https://www.baidu.com/'
	# 2.发送请求
    response = requests.get(url=url,headers=header)
     # 3.获取页面数据
    text = response.content.decode('utf-8')
	fileName = 'baidu.html'
    with open(fileName,'w',encoding='utf-8') as f:
        f.write(text)
	# .*?为非贪婪模式,.*为贪婪模式
    pattern = re.compile('class=mnav>(.*?)</a>', re.S)

    result = re.findall(pattern, text, flags=0)

    for i in result:
        print(i)
        

运行结果:
新闻
hao123
地图
视频
贴吧

爬取网页图片

本案列为爬取糗事百科图像中的图片

爬取详情

  1. 获取有效url
    url

  2. 获取UA伪装
    UA1

  3. 下载图片

使用聚焦爬虫

代码:

import requests
import re
import os
if __name__ == '__main__':

    # UA伪装
    header = {
       'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Safari/537.36'
    }
    # 编写通用爬虫获取网页源码
    url = 'https://www.qiushibaike.com/imgrank/'

    response = requests.get(url=url,headers=header)
    html = response.text
    # print(html)

    # 进行数据解析,获取目标url
    es = 'target="_blank">\n<img src="(.*?)" alt='  # 换行小坑
    pattern = re.compile(es, re.S)
    url_list = re.findall(pattern, html, flags=0)

    for url in url_list:
        print(url)

    if not os.path.exists('OiutuLib'):
        os.mkdir('./QiutuLib')

    # 编写聚焦爬虫,获取图片
    for url in url_list:
        src = "https:" + url
        resp = requests.get(url=src,headers=header)
        pic = resp.content   # 转换二进制流的形式

        # 持久化存储
        fileName = url.split('/')[-1]
        file_path = './QiutuLib/' + fileName
        with open(file_path, 'wb') as f:
            f.write(pic)

    print('图片获取成功!!')



运行结果:
结果

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

liaoMITC

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值