栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

爬虫爬取网络图片(详细版)

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

爬虫爬取网络图片(详细版)

目录
  • re式匹配
    • 匹配类型
    • 匹配代码
  • 匹配网页指定关键字
    • 匹配详情
  • 爬取网页图片
    • 爬取详情

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——>将百度添加为禁止;如图:

匹配详情
  1. 获取AU伪装

  2. 获取对应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>(.*?)', re.S)

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

    for i in result:
        print(i)
        

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

爬取网页图片

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

爬取详情
  1. 获取有效url

  2. 获取UA伪装

  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  # 换行小坑
    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('图片获取成功!!')



运行结果:

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/275081.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号