您当前的位置: 首页 > 

IT之一小佬

暂无认证

  • 2浏览

    0关注

    1192博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

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

IT之一小佬 发布时间:2021-02-05 15:13:00 ,浏览量:2

第一步:模拟浏览器发出请求,获取网页数据
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('(.*?)', html)[0]  # 文章标题
urls = re.findall('', 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('(.*?)', html)[0]  # 文章标题
urls = re.findall('', 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)

关注
打赏
1665675218
查看更多评论
立即登录/注册

微信扫码登录

0.0486s