妹子图爬取

页面链接

感谢崔大佬: 原文链接

正则实现代码:

 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的更多相关文章

  1. Python爬虫入门教程 12-100 半次元COS图爬取

    半次元COS图爬取-写在前面 今天在浏览网站的时候,忽然一个莫名的链接指引着我跳转到了半次元网站 https://bcy.net/ 打开之后,发现也没有什么有意思的内容,职业的敏感让我瞬间联想到了 c ...

  2. Python爬虫入门教程: 半次元COS图爬取

    半次元COS图爬取-写在前面 今天在浏览网站的时候,忽然一个莫名的链接指引着我跳转到了半次元网站 https://bcy.net/ 打开之后,发现也没有什么有意思的内容,职业的敏感让我瞬间联想到了 c ...

  3. 爬虫 (4)- Selenium与PhantomJS(chromedriver)与爬取案例

    Selenium文档 Selenium是一个Web的自动化测试工具,最初是为网站自动化测试而开发的,类型像我们玩游戏用的按键精灵,可以按指定的命令自动操作,不同是Selenium 可以直接运行在浏览器 ...

  4. Scrapy框架实战-妹子图爬虫

    Scrapy这个成熟的爬虫框架,用起来之后发现并没有想象中的那么难.即便是在一些小型的项目上,用scrapy甚至比用requests.urllib.urllib2更方便,简单,效率也更高.废话不多说, ...

  5. Python爬取地图瓦片

    由于要在内网开发地图项目,不能访问在线的地图服务了,就想把地图瓦片下载下来,网上找了一些下载器都是需要注册及收费的,否则下载到的图都是打水印的,如下: 因为地图瓦片就是按照层级.行.列规则组织的一张张 ...

  6. python爬取拉勾网数据并进行数据可视化

    爬取拉勾网关于python职位相关的数据信息,并将爬取的数据已csv各式存入文件,然后对csv文件相关字段的数据进行清洗,并对数据可视化展示,包括柱状图展示.直方图展示.词云展示等并根据可视化的数据做 ...

  7. Python协程爬取妹子图(内有福利,你懂得~)

    项目说明: 1.项目介绍   本项目使用Python提供的协程+scrapy中的选择器的使用(相当好用)实现爬取妹子图的(福利图)图片,这个学会了,某榴什么的.pow(2, 10)是吧! 2.用到的知 ...

  8. Python爬虫入门教程 2-100 妹子图网站爬取

    妹子图网站爬取---前言 从今天开始就要撸起袖子,直接写Python爬虫了,学习语言最好的办法就是有目的的进行,所以,接下来我将用10+篇的博客,写爬图片这一件事情.希望可以做好. 为了写好爬虫,我们 ...

  9. Python3爬虫系列:理论+实验+爬取妹子图实战

    Github: https://github.com/wangy8961/python3-concurrency-pics-02 ,欢迎star 爬虫系列: (1) 理论 Python3爬虫系列01 ...

随机推荐

  1. Zeppelin的入门使用系列之使用Zeppelin来创建临时表UserTable(三)

    不多说,直接上干货! 前期博客 Zeppelin的入门使用系列之使用Zeppelin运行shell命令(二) 我们必须要先使用Spark 语句创建临时表UserTable,后续才能使用Spark SQ ...

  2. Java设计模式之单例设计模式总结

    package singleton; /**单例设计模式 饿汉式 * * @author gx *这种方式基于classloder机制避免了多线程的同步问题,不过,instance在类装载时就实例化, ...

  3. Jquery使用ajax参数详解

    记录一下  Jquery使用ajax(post.get及参数详解) 1.get: $.ajax({ type: "GET", url: baseUrl + "Showco ...

  4. mongodb的创建删除数据库

    1.创建数据库 use 命令 MongoDB use DATABASE_NAME 用于创建数据库.该命令将创建一个新的数据库,如果它不存在,否则将返回现有的数据库. 语法: use DATABASE  ...

  5. cf519D. A and B and Interesting Substrings(前缀和)

    题意 给出$26$个字母对应的权值和一个字符串 问满足以下条件的子串有多少 首尾字母相同 中间字母权值相加为0 Sol 我们要找到区间满足$sum[i] - sum[j] = 0$ $sum[i] = ...

  6. Ecshop数据表结构

    -- 表的结构 `ecs_account_log`CREATE TABLE IF NOT EXISTS `ecs_account_log` (`log_id` mediumint(8) unsigne ...

  7. JAVA-WEB总结02

     1 什么是JavaBean?有何特征?    1)符合特定规则的类    2)JavaBean分二类: a)侠义的JavaBean .私有的字段(Field) .对私有字段提供存取方法(读写方法) ...

  8. BZOJ 3130: [Sdoi2013]费用流 网络流+二分

    3130: [Sdoi2013]费用流 Time Limit: 10 Sec  Memory Limit: 128 MBSec  Special JudgeSubmit: 1230  Solved: ...

  9. 【UML】状态图Statechart diagram(转)

    前言         UML由动态图和静态图组成,状态图就是属于动态图中较为重要的一张图. 定义         用来描述一个特定对象的所有可能状态以及由于各种事件的发生而引起的状态之间的转移. 目的 ...

  10. groupdel - Delete a group

    总览 SYNOPSIS groupdel group 描述 DESCRIPTION groupdel 命令会修改系统帐号档,会删除所有指定群组的信息 . 群组名须存在. 你须手动确认一下所有的档案系统 ...