最近在学爬虫,写了一个爬取妹子图片
功能:自动下载妹子图,并自动命名
网址:http://www.netbian.com/meinv/
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# 爬取妹子图
# url:http://www.netbian.com/meinv/
# http://www.netbian.com/meinv/index_2.htm
import urllib.request
import urllib.parse
from bs4 import BeautifulSoup
import re
def main():
# 输入网址得到服务器返回的数据
allurl()
# 解析数据得到图片链接和图片名称
# 保存图片到本地,图名做相应修改
# 图片链接格式
findImg = re.compile(r'src="(.*?)"', re.S)
# 图片名称格式
findName = re.compile(r"<b>(.*?)</b>", re.S)
def findurl(url):
"""一个网页的爬取(后面用for爬取所有网页)"""
# head伪装
headers = {
'User-Agent': "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) "
"Chrome/78.0.3904.108 Safari/537.36"}
req = urllib.request.Request(url=url, headers=headers) # 发送信息的预处理
response = urllib.request.urlopen(req) # 得到整个网页
# 读取网页并解码
html = response.read().decode(encoding='gb18030') # 使用'utf-8'无法解码,换为'gb18030'
return html
def allurl():
"""循环爬取所有网页"""
for i in range(3):
url = "http://www.netbian.com/meinv/index_"+str(i+2)+".htm"
html = findurl(url) # 获取一个网页
# print(html) # 测试:是否获取到网页
# 解析数据得到图片链接和图片名称
bs = BeautifulSoup(html, "html.parser") # 将网页解析为树形
t_list = bs.select("li>a") # 找到标签li中的所有子标签a,做成列表
t_list = t_list[-17:-1]
# print(t_list) # 测试:当前网页所有妹子图放入列表(每页17个)
# 对每个妹子进行正则表达式提取(链接及名称)
for item in t_list:
item = str(item) # 正则表达式是对字符串操作,所以先转化为字符串
# 提取图片名
name = re.findall(findName, item)
# 提取链接,并下载
img = re.findall(findImg, item)
savejpg(name, img)
def imgurl(url):
"""获取图片链接下载图片"""
# head伪装
headers = {
'User-Agent': "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) "
"Chrome/78.0.3904.108 Safari/537.36"}
req = urllib.request.Request(url=url, headers=headers) # 发送信息的预处理
response = urllib.request.urlopen(req) # 得到图片链接
# 二进制形式读取链接
html = response.read()
return html
def savejpg(name, img):
"""得到名字和链接存储图片"""
# print(name, img) # 测试:输出图名及对应链接
meizi = imgurl(img[0]) # 获取图片链接
with open('D:\FishC\项目\爬取妹子图\爬取妹子的结果\{0}.jpg'.format(name[0]), 'wb') as f:
f.write(meizi)
if __name__ == '__main__':
# 主函数
main()
爬取结果: