直接上代码:
值得注意的是这个网站有反爬机制,我在headers里加了"Referer": “https://www.mzitu.com/”。
很多网站站也有,比如哔哩哔哩动画

个人觉得requests比urllib.request好用一点,更简洁。
用到了re模块来清洗数据
search返回match对象,用group获取内容,
m.group() == m.group(0) == 所有匹配的字符(即匹配正则表达式整体结果)
group(1) 列出第一个括号匹配部分,group(2) 列出第二个括号匹配部分,group(3) 列出第三个括号匹配部分。
m.groups() 返回所有括号匹配的字符,以tuple格式。m.groups() == (m.group(0), m.group(1), …)
-
没有匹配成功的,re.search()返回None
-
当然正则表达式中没有括号,group(1)肯定不对了。
re.sub(pattern, repl, string, count=0, flags=0)
其中三个必选参数:pattern, repl, string
两个可选参数:count, flags
# -*- coding = utf-8 -*-
# @time:2020/12/7 22:05
# Author:Vab
# @File:mzitu.py
# @Software:PyCharm
import re
import requests
import os.path
headers = {
"Referer": "https://www.mzitu.com/",
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.66 Safari/537.36'
} #headers里边的“Referer”是这个网站反爬技术,要把这个加上
def savePic(img_url):
try:
tupian = requests.get(img_url, headers=headers).content
except Exception as w:
print("图片加载失败!")
return #异常处理
with open('D:\\aaa\\'+os.path.basename(img_url),'wb') as fp: #图片要二进制写入
fp.write(tupian)
def geturl():
for i in range(1,89):
if i == 1:
url = 'https://www.mzitu.com/204419'
else:
url = 'https://www.mzitu.com/204419'+'/'+str(i) #取2-88张图片的url
try:
req = requests.get(url, headers=headers).text
except Exception as a:
print("Get:",url,"failed!;",)
continue #异常处理
ob = re.compile(r'<img class="blur" src="(.*?)"(\s\S*?)')
html = re.search(ob, req)
html = html.group()
html = re.sub('<img class="blur" src="', '', html)
html = re.sub('"', '', html)
newurl = re.split( '\s', html) #清洗出来图片的url
savePic(newurl[0])
geturl()

本文介绍了一个使用Python进行网页爬虫的实例,目标是抓取Mzitu网站上的图片。在代码中,作者通过设置headers以应对网站的反爬机制,并利用requests库和正则表达式进行数据清洗。re.search用于查找匹配,group方法用于获取匹配内容,而re.sub则用于替换操作。虽然urllib.request也常用,但作者认为requests库更加简洁易用。
417





