爬取网站图片并保存到本地

news/2024/7/3 4:16:26

第一步:模拟浏览器发出请求,获取网页数据

import requests# 目标网站
url = 'https://baijiahao.baidu.com/s?id=1687278509395553439&wfr=spider&for=pc'
# 头部伪装
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:84.0) Gecko/ Firefox/84.0'}
# 发出请求
f = requests.get(url, headers=headers)      # 从网页获取html内容
print(f.text)       # 打印网页返回数据
print(f)

运行结果:

        根据print(f)中的返回值来判定是否爬取成功,为200时表示网页有相应,爬取成功,为403或者其他则表示不成功,可能时网站具有反爬机制。

第二步:拿到网页数据进行解析

html = f.text
title = re.findall('<title>(.*?)</title>', html)[0]  # 文章标题
urls = re.findall('<img class="large" data-loadfunc=0 src="(.*?)" data-loaded=0 />', html)  # 图片网址
print(title)
print(urls)

运行效果:

        在这里使用的是正则表达式,首先需要先找到图片的网址,检索网页(在网页源代码中进行找正则表达式),然后进行匹配找到相应的区域段,而后将需要的部分改成(.*?),不需要的部分改成 .? 不加括号。如程序中的re.findall()中所示。
        如果在print(urls)时,出现的结果为 [] ,则表示未能匹配到内容,一般而言是正则出现了问题。

第三步:保存图片

在当前目录下创建文件夹,使用 os.mkdir() 函数

dir_name = './download/images'
if not os.path.exists(dir_name):     # 创建文件夹os.mkdir(dir_name)

保存图片:

for ur in urls:time.sleep(1)img_content = requests.get(ur, headers=headers)with open(dir_name + '/%s.png' % title, 'wb') as f:f.write(img_content.content)

运行效果:

        建议加上time.sleep()函数,如果访问过于频繁可能会被识别出。此处使用 ‘wb ’的二进制形式写入。

全部代码:

import requests
import re
import time
import os# 目标网站
url = 'https://baijiahao.baidu.com/s?id=1687278509395553439&wfr=spider&for=pc'
# 头部伪装
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:84.0) Gecko/ Firefox/84.0'}
# 发出请求
f = requests.get(url, headers=headers)      # 从网页获取html内容
# print(f.text)       # 打印网页返回数据
print(f)
html = f.text
title = re.findall('<title>(.*?)</title>', html)[0]  # 文章标题
urls = re.findall('<img class="large" data-loadfunc=0 src="(.*?)" data-loaded=0 />', html)  # 图片网址
print(title)
print(urls)
dir_name = './download/images'
if not os.path.exists(dir_name):     # 创建文件夹os.mkdir(dir_name)for ur in urls:time.sleep(1)img_content = requests.get(ur, headers=headers)with open(dir_name + '/%s.png' % title, 'wb') as f:f.write(img_content.content)

http://lihuaxi.xjx100.cn/news/268485.html

相关文章

Android深度探索--HAL与驱动开发----第一章读书笔记

1.1 Android拥有非常完善的系统构架可以分为四层&#xff1a; 第一层&#xff1a;Linux内核。主要包括驱动程序以及管理内存、进程、电源等资源的程序 第二层&#xff1a;C/C代码库。主要包括Linux的.so文件以及嵌入到APK程序中的NDK代码 第三层&#xff1a;android SDK API …

引争议!硕导提议高校教师应多配偶,这样就能多生娃!高校的处理通报来了...

点击上方“视学算法”&#xff0c;选择加"星标"或“置顶”重磅干货&#xff0c;第一时间送达本文来源&#xff1a;学术会议资讯、华东政法大学、新浪微博等近日&#xff0c;华东政法大学法学院某包姓副研究员、硕导受到了广泛的关注&#xff0c;不是因为学术成果&…

setleft android,android TextView的setCompoundDrawables()方法

这个方法可以在TextView的四周加上一个Drawable图标。对于只知道TextView显示文字的&#xff0c;是不是很高大上。setCompoundDrawables(Drawable left, Drawable top, Drawable right, Drawable bottom)看代码就知道&#xff0c;参数顺序是左上右下。不想在四周加图片的话&…

Python, C++和Java代码互翻,Facebook开发首个自监督神经编译器

译者 | 刘畅出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;将早期的编程语言&#xff08;例如COBOL&#xff09;的代码库迁移到现在的编程语言&#xff08;例如Java或C&#xff09;是一项艰巨的任务&#xff0c;它需要源语言和目标语言方面的专业知识。COBOL如今仍在…

十个最常用深度学习图像/视频数据标注工具

点击上方“小白学视觉”&#xff0c;选择加"星标"或“置顶”重磅干货&#xff0c;第一时间送达从此以后图像与视频数据标注不用为找工具发愁&#xff01;好东西记得分享图像数据标注概述在深度学习领域&#xff0c;训练数据对训练结果有种至关重要的影响&#xff0c;…

启用linux内核中的nfs服务

内核配置请参考《210支持nfs作为根文件系统启动》 安装配置 NFS &#xff0c;安装的过程请参考《嵌入式开发环境搭建-基于14.04》中的NFS的搭建过程&#xff0c;在参考的过程是有一步要修改的&#xff0c;也就是要搭建的位置路径&#xff1a;配置/etc/exports 这里再文档中的配…

leetcod003 Longest_Substring_Without_Repeating

""" 给定一个字符串&#xff0c;请你找出其中不含有重复字符的 最长子串 的长度。示例 1:输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc"&#xff0c;所以其长度为 3。 示例 2:输入: "bbbbb" 输出: 1 解释: 因…

spring-aop入门

2019独角兽企业重金招聘Python工程师标准>>> 1、AOP介绍 AOP 即 Aspect Oriented Program 面向切面编程 &#xff0c;首先&#xff0c;在面向切面编程的思想里面&#xff0c;把功能分为核心业务功能&#xff0c;和周边功能。 所谓的核心业务&#xff0c;比如登陆&a…