妹子图爬取__RE__BS4
妹子图爬取
页面链接
感谢崔大佬: 原文链接
正则实现代码:
import requests
import re
import os
import random class mzitu(): def __init__(self):
self.headers = {
'User-Agent': "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1",
'Referer': 'http://i.meizitu.net'}
self.folder_path = str(os.getcwd()) def all_url(self, url):
html = self.request(url).text
all_a_re = r'<a\shref="(http://www.mzitu.com/\d+)"\starget="_blank"'
pattern = re.compile(all_a_re)
all_a_list = re.findall(pattern, html)
# for href in all_a_list:
# self.html(href)
self.html(random.choice(all_a_list)) def html(self, href):
html = self.request(href).text
title_pattern = re.compile(r'<h2\sclass="main-title">(.*?)</h2>', re.S)
title = re.findall(title_pattern, html)
self.mkdir(str(title))
max_pattern = re.compile(r'<span>(\d*?)</span>', re.S)
max_num = re.findall(max_pattern, html)
max_num = int(max_num[-1])
for i in range(max_num):
page_url = href + "/" + str(i)
self.img(page_url) def mkdir(self, folder):
path = str(folder.strip())
os.makedirs(os.path.join(self.folder_path, path))
print(str(folder) + "------已创建")
os.chdir(self.folder_path + str("/") + path) def img(self, page_url):
img_html = self.request(page_url).text
img_url_re = r'<img\ssrc="(.*?)"\salt=".*?"'
pattern = re.compile(img_url_re, re.S)
img_all = re.findall(pattern, img_html)
img_url = img_all[0]
self.save(img_url) def save(self, img_url):
name = img_url[-6:]
print(name + "正在下载")
img = self.request(img_url)
f = open(name, 'wb')
f.write(img.content)
f.close() def request(self, url): # 这个函数获取网页的response 然后返回
response = requests.get(url, headers=self.headers)
return response Mzitu = mzitu() # 实例化
Mzitu.all_url('http://www.mzitu.com/all')
BS4实现代码:
import requests
from bs4 import BeautifulSoup
import os
import random class mzitu(): def __init__(self):
self.headers = {
'User-Agent': "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1",
'Referer': 'http://i.meizitu.net'}
self.folder_path = str(os.getcwd()) def all_url(self, url):
html = self.request(url) # 调用request函数把套图地址传进去会返回给我们一个response
all_a = BeautifulSoup(html.text, 'lxml').find(
'div', class_='all').find_all('a') # for i in range(1, len(all_a)):
# a = all_a[i]
a = random.choice(all_a)
title = a.get_text()
print(u'开始保存:', title) # 加点提示不然太枯燥了
# 我注意到有个标题带有 ? 这个符号Windows系统是不能创建文件夹的所以要替换掉
path = str(title).replace("?", '_')
self.mkdir(path) # 调用mkdir函数创建文件夹!这儿path代表的是标题title哦!!!!!不要糊涂了哦!
href = a['href']
# 调用html函数把href参数传递过去!href是啥还记的吧? 就是套图的地址哦!!不要迷糊了哦!
self.html(href) def html(self, href): # 这个函数是处理套图地址获得图片的页面地址
html = self.request(href)
self.headers['referer'] = href
max_span = BeautifulSoup(html.text, 'lxml').find(
'div', class_='pagenavi').find_all('span')[-2].get_text()
for page in range(1, int(max_span) + 1):
page_url = href + '/' + str(page)
self.img(page_url) # 调用img函数 def img(self, page_url): # 这个函数处理图片页面地址获得图片的实际地址
img_html = self.request(page_url)
img_url = BeautifulSoup(img_html.text, 'lxml').find(
'div', class_='main-image').find('img')['src']
self.save(img_url) def save(self, img_url): # 这个函数保存图片
name = img_url[-6:]
print(name + "正在下载")
img = self.request(img_url)
f = open(name, 'ab')
f.write(img.content)
f.close() def mkdir(self, path): # 这个函数创建文件夹
path = path.strip()
isExists = os.path.exists(os.path.join(self.folder_path, path))
if not isExists:
print(path)
os.makedirs(os.path.join(self.folder_path, path))
os.chdir(self.folder_path + str("/") + path) # 切换到目录
return True
else:
print(u'名字叫做', path, u'的文件夹已经存在了!')
return False def request(self, url): # 这个函数获取网页的response 然后返回
content = requests.get(url, headers=self.headers)
return content Mzitu = mzitu() # 实例化
Mzitu.all_url('http://www.mzitu.com/all') # 给函数all_url传入参数 你可以当作启动爬虫(就是入口)
妹子图爬取__RE__BS4的更多相关文章
- Python爬虫入门教程 12-100 半次元COS图爬取
半次元COS图爬取-写在前面 今天在浏览网站的时候,忽然一个莫名的链接指引着我跳转到了半次元网站 https://bcy.net/ 打开之后,发现也没有什么有意思的内容,职业的敏感让我瞬间联想到了 c ...
- Python爬虫入门教程: 半次元COS图爬取
半次元COS图爬取-写在前面 今天在浏览网站的时候,忽然一个莫名的链接指引着我跳转到了半次元网站 https://bcy.net/ 打开之后,发现也没有什么有意思的内容,职业的敏感让我瞬间联想到了 c ...
- 爬虫 (4)- Selenium与PhantomJS(chromedriver)与爬取案例
Selenium文档 Selenium是一个Web的自动化测试工具,最初是为网站自动化测试而开发的,类型像我们玩游戏用的按键精灵,可以按指定的命令自动操作,不同是Selenium 可以直接运行在浏览器 ...
- Scrapy框架实战-妹子图爬虫
Scrapy这个成熟的爬虫框架,用起来之后发现并没有想象中的那么难.即便是在一些小型的项目上,用scrapy甚至比用requests.urllib.urllib2更方便,简单,效率也更高.废话不多说, ...
- Python爬取地图瓦片
由于要在内网开发地图项目,不能访问在线的地图服务了,就想把地图瓦片下载下来,网上找了一些下载器都是需要注册及收费的,否则下载到的图都是打水印的,如下: 因为地图瓦片就是按照层级.行.列规则组织的一张张 ...
- python爬取拉勾网数据并进行数据可视化
爬取拉勾网关于python职位相关的数据信息,并将爬取的数据已csv各式存入文件,然后对csv文件相关字段的数据进行清洗,并对数据可视化展示,包括柱状图展示.直方图展示.词云展示等并根据可视化的数据做 ...
- Python协程爬取妹子图(内有福利,你懂得~)
项目说明: 1.项目介绍 本项目使用Python提供的协程+scrapy中的选择器的使用(相当好用)实现爬取妹子图的(福利图)图片,这个学会了,某榴什么的.pow(2, 10)是吧! 2.用到的知 ...
- Python爬虫入门教程 2-100 妹子图网站爬取
妹子图网站爬取---前言 从今天开始就要撸起袖子,直接写Python爬虫了,学习语言最好的办法就是有目的的进行,所以,接下来我将用10+篇的博客,写爬图片这一件事情.希望可以做好. 为了写好爬虫,我们 ...
- Python3爬虫系列:理论+实验+爬取妹子图实战
Github: https://github.com/wangy8961/python3-concurrency-pics-02 ,欢迎star 爬虫系列: (1) 理论 Python3爬虫系列01 ...
随机推荐
- Coroutine(协程)模式与线程
概念 协程(Coroutine)这个概念最早是Melvin Conway在1963年提出的,是并发运算中的概念,指两个子过程通过相互协作完成某个任务,用它可以实现协作式多任务,协程(coroutine ...
- c#的Lambda 表达式
首先看官方的说法: Lambda 表达式是一种可用于创建委托或表达式目录树类型的匿名函数. 通过使用 lambda 表达式,可以写入可作为参数传递或作为函数调用值返回的本地函数. Lambda 表达式 ...
- c# 串口操作
public class CommPort : IDisposable { public string Port = ""; ///<summary> ///波特率96 ...
- js正则匹配获取文件名
//获取文件名,不带后缀 var file_name=file_path.replace(/(.*\/)*([^.]+).*/ig,"$2"); //获取文件后缀 1.var Fi ...
- FAST FW150R软件版本升级解决一些网页无法加载问题
家里用的移动宽带,通过无线路由器无线上网.上taobao.天猫都很快,但是一上京东.苏宁易购界面加载很慢,界面无法显示,怀疑是无线路由问题,然后直接通过网线相连接,发现问题消失,决定对无线路由软件版本 ...
- SIGGRAPH 2017:深度学习与计算机图形学的碰撞
每年由美国计算机协会(Association of Computing Machinery,简称ACM)计算机图形专业组举办的年会SIGGRAPH,是全球最负盛名的图形学和交互技术盛会.今年已经是这场 ...
- html 之table标签结构学习
一.HTML table标签结构 html 中table标签的结构情况,如下所示: <!-- table标签结构如下: <table> <thead> # thead表格 ...
- Android(java)学习笔记127:生成 4种不同权限的文件
1. 首先我们编写一个生成 4种 不同权限的文件的程序案例: (1)首先是activity_main.xml文件: <RelativeLayout xmlns:android="htt ...
- Win10激活方法(企业版)
Win10激活 注意:以管理员身份运行,需要电脑有网(亲测激活企业版没问题) 然后一条一条复制执行 slmgr /ipk NPPR9-FWDCX-D2C8J-H872K-2YT43 slmgr /sk ...
- Centos7.3 安装devstack stein版本
1. 系统准备 # 关闭防火墙 systemctl stop firewalld systemctl disable firewalld # 关闭selinux setenforce 0 sed -i ...