【代码】网页爬虫爬图片

前言

编写网络爬虫代码,实现自动化下载图片

准备工作

安装requests

1
pip install requests

编写爬虫

请求网页

  • 将网页源代码爬取并打印在控制台

<html>:要爬的网址

1
2
3
4
import requests

response = requests.get("<html>")
print(response.text)
  • 如果网站有反爬虫,可以修改headers中的User-Agent
  • 可以自定义User-Agent,或者在浏览器打开开发者模式查看网页请求头的User-Agent
1
2
3
4
5
6
7
import requests

headers = {
"User-Agent": "Admin"
}
response = requests.get("<html>", headers = headers)
print(response.text)

解析网页

  • 导入re,用正则表达式写爬取规则
  • 可以先查看网站源代码,把包含图片原链接的标签复制下来,可能会出现的不同的字符串修改为.*?

<png>:图片的正则表达式

1
2
3
4
5
6
import re

html = response.text

urls = re.findall('<png>', html)
print(urls)

保存图片

遍历数组

1
2
for url in urls:
response = requests.get(url, headers = headers)

获取图片名

  • 用split分割字符串
1
file_name = url.split('/')[-1]

保存图片

  • 'wb'用二进制写入文件
1
2
with open(file_name, 'wb') as f:
f.write(response.content)

设置延迟

  • 如果是个人网站,为防止网站崩溃,设置延迟1秒抓取
1
2
3
import time

time.sleep(1)

优化

设置目录名

  • 将网页标题作为目录名

<dir>:标题的正则表达式

1
dir_name = re.findall('<dir>', html)[-1]

创建目录

1
2
3
4
import os

if not os.path.exists(dir_name):
os.mkdir(dir_name)

修改保存路径

  • 将保存路径添加父目录
1
2
with open(dir_name + '/' + file_name, 'wb') as f:
f.write(response.content)

完整源代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
import time
import requests
import re
import os

headers = {
"User-Agent": "Admin"
}
response = requests.get("https://www.vmgirls.com/13230.html", headers = headers)
html = response.text

dir_name = re.findall('<h1 class="post-title h3">(.*?)</h1>', html)[-1]

if not os.path.exists(dir_name):
os.mkdir(dir_name)

urls = re.findall('<a href="(.*?)" alt=".*?" title=".*?">', html)
print(urls)

for url in urls:
time.sleep(1)
file_name = url.split('/')[-1]
response = requests.get(url, headers = headers)
with open(dir_name + '/' + file_name, 'wb') as f:
f.write(response.content)

完成

参考文献

哔哩哔哩——python学习者