文档章节

python 老司机开车之二爬取福利妹纸图片

李狗蛋丶
 李狗蛋丶
发布于 2016/11/23 21:24
字数 808
阅读 273
收藏 1
点赞 0
评论 0

    在进行老司机开车之一时(即微信开车公众号)无意中发现这样一个福利妹纸图地址,妹纸图都还挺不错的,但是每次翻页的时候各种弹出式广告,非常烦,于是想着把图片都down下来,然后放到路由器的samb服务上,这样可以用手机轻松访问了!!

    效果图:

          

    先上源码:注意修改下载路径

#-*- coding:utf-8 -*-

import urllib
import urllib2
import re
import os
import requests
from bs4 import BeautifulSoup
import sys
reload(sys)
sys.setdefaultencoding('utf-8')


class BeatifulGirl:
    #初始化基本链接地址以及下载路径地址
    def __init__(self):
        self.baseurl = 'http://zhaofuli.xyz/luyilu/'
        self.basepath = '/Volumes/Python/'
    #获取目录内容,读取链接
    def get_content(self,url):
        res = requests.get(url)
        html = BeautifulSoup(res.text,'lxml')
        content = html.find_all("a",class_="thumbnail")
        #查询对应的标签并把href值加入到list里
        content_list = []
        for i in content:
           content_list.append(i.get('href'))
        return content_list

    #读取目录链接里的图片
    def get_img(self,url):
        #构造头文件,获取所有图片地址
        headers = { #'Host': 'images.126176.com:8818',
                    'Connection': 'keep-alive',
                    'Cache-Control': 'max-age=0',
                    'Upgrade-Insecure-Requests': '1',
                    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.71 Safari/537.36',
                    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
                    'DNT': '1',
                    'Referer':'http://zhaofuli.xyz/luyilu/2016/1031/2571.html',
                    #'Accept-Encoding': 'gzip, deflate, sdch',
                    'Accept-Language': 'zh-CN,zh;q=0.8',
                    #'If-Modified-Since': 'Mon, 31 Oct 2016 11:43:36 GMT'
                }

        data = None
        #获取html编码格式为gbk
        html = urllib.urlopen(url).read().decode('gbk')
        #获取图片地址
        imgre = re.compile(r'<p>.*?<img src="(.*?)"')
        imglist = re.findall(imgre, html)
        #获取文件夹名称
        pathre = re.findall(re.compile(r'<h1 class="article-title">(.*?)</h1>'),html)
        path = pathre[0]
        #判断title里是否包含括号,若包含则去掉括号,将同一主题的图片放在一个目录中
        if path.find('(') != -1:

            pathname = self.basepath+path[:-3]
        else:
            pathname = self.basepath+path
        print pathname
        self.mkdir(pathname)
        x=0
        for imgurl in imglist:
            print imgurl
            n = imgurl.rfind('-')
            jpg_name = imgurl[n+1:].encode('utf8')
            #使用header模拟浏览器登陆,避免重定向
            req = urllib2.Request(imgurl,None,headers)
            rt = urllib2.urlopen(req)
            fw = open(pathname+'/%s'%jpg_name,'wb')
            fw.write(rt.read())
            fw.close()
            x += 1
            print("正在下载第%s张图片"%x)

    def get_page(self,url):
        #这里由于页面上无法获取总页数,于是采用固定页面遍历,不过一般不会超过20页,所以够了
        num = 1
        for num in range(1,20):
            #循环读取页面
            print("正在读取页面:" + url)
            self.get_img(url)
            print("第%s页读取完成"%num)
            #获取下页地址
            res = requests.get(url)
            html = BeautifulSoup(res.text,'lxml')
            next_page = html.find("li",class_="next-page")
            if next_page:
                for i in next_page:
                    next_url = i.get('href')
                #判断下页地址是否存在,若存在则拼接出新的url,若不存在则跳出循环

                #截取当前url,拼接获取到的下页地址
                n = url.rfind('/')
                url = url[:n+1]+next_url
            else:
                break

    def mkdir(self,path):
        path = path.strip()
        #判断路径是否存在
        isExist = os.path.exists(path)
        print path
        if not isExist:
            os.mkdir(path)
            return True
        else:
            print u'目录已存在'
            return False

    def main(self):
        #构造首页链接地址
        num = 1
        #这里只爬取前2页数据,可根据需要修改,图片较多,建议每次读取3页以内
        for num in range(1,2):
            url_list = 'http://zhaofuli.xyz/luyilu/list_5_%s.html'%num
            content_list = self.get_content(url_list)
            print("加载目录第%s页。。。"%num)
            #读取首页中各链接内容,调用get_page获取所有页面内容
            i = 0
            for url in content_list:
                url = content_list[i]
                print url
                page_url = 'http://zhaofuli.xyz' + url
                self.get_page(page_url)
                i+=1
            num+=1

test = BeatifulGirl()
test.main()

© 著作权归作者所有

共有 人打赏支持
李狗蛋丶
粉丝 1
博文 28
码字总数 20793
作品 0
广州
数据库管理员
我的数据分析(算法)学习进阶路线

今天简单介绍下,我入门数据分析以及算法工程师对我有帮助的资料。 第一步报个驾校,有车可以练车技 开车第一步不是学习交规,而是先报个驾校,你得有车可以练车技。就像用python写程序第一步...

cloudinsea
05/07
0
0
Python爬虫如何快速上手,并达到爬取大规模数据的水平

互联网的数据爆炸式的增长,而利用 Python 爬虫我们可以获取大量有价值的数据: 1.爬取数据,进行市场调研和商业分析 爬取知乎优质答案,筛选各话题下最优质的内容; 抓取房产网站买卖信息,...

技术小能手
06/28
0
0
分手后,小伙怒用Python爬取上万空姐照片,赢取校花选举大赛!

首先展示下Python爬取到的成果:   我做什么都要争第一,这次的校花投票选举大赛也不例外,虽然我是个男的......但是我看到了前女友竟然已经有三百多票排到第三名了,我怎么能眼睁睁的看着...

p柯西
06/12
0
0
一个月入门Python爬虫,快速获取大规模数据

数据是创造和决策的原材料,高质量的数据都价值不菲。而利用爬虫,我们可以获取大量的价值数据,经分析可以发挥巨大的价值,比如: 豆瓣、知乎:爬取优质答案,筛选出各话题下热门内容,探索...

Python开发者
04/25
0
0
Python BeautifulSoup爬取oschina个人blog文章

前段时间学习了一些python的模块,要熟悉各个功能还是得写写代码的,所以根据前面掌握的模块知识,写了一个小程序,专门用来爬取oschina的个人博客文章的小工具。经常看到一些大牛的好文章,...

China_OS
2012/12/21
0
0
菜鸟学Python,上半年文章大汇总

一晃大半年过去了,时间过的真快啊!上半年我一共发表了原创的文章有近45篇,其中有一些是粉丝投稿的!后台总有人留言说查找历史文章不方便,怎么办?为了方便大家阅读,我把上半年的原创文章...

菜鸟学python
06/24
0
0
Python异步加载爬虫,护士私密照源源不断,Ajax抓取速度惊人!

利用aiohttp这个库来进行异步协程提速! 如果Python爬虫不仅在代码编写上展现速度,而且在爬取过程中表现出优越感,最好的就是去下载图片吧,而下载图片最好的代表当然是......我就不多说了。...

Python新世界
07/17
0
0
python从零学——scrapy初体验

python从零学——scrapy初体验 近日因为一些事情,需要从网上爬取一些东西,故而想通过使用爬虫来顺便学习下强大的python。现将一些学习中遇到的问题记录下来,以便日后查询 1. 开发环境的准...

咾咔叽
07/15
0
0
几个Python小案例,爱上Python编程!

Python是一种面向对象的解释型编程语言,源代码与解释器CPython遵守GPL协议,Python语法简洁清晰。 语法简洁清晰,那么我们用少量的Python代码能做哪些有趣的东西?温馨提示:文末必看。 一、...

qq1622479435
06/17
0
0
没有内涵段子可以刷了,利用Python爬取段友之家贴吧图片和小视频(含源码)

由于最新的视频整顿风波,内涵段子APP被迫关闭,广大段友无家可归,但是最近发现了一个“段友”的app,版本更新也挺快,正在号召广大段友回家,如下图,有兴趣的可以下载看看(ps:我不是打广...

p柯西
06/05
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Java架构师知识体认识

源码分析 常用设计模式 Proxy代理模式 Factory工厂模式 Singleton单例模式 Delegate委派模式 Strategy策略模式 Prototype原型模式 Template模板模式 Spring5 beans 接口实例化 代理Bean操作 ...

小致dad
6分钟前
0
0
SpringBoot | 第十章:Swagger2的集成和使用

前言 前一章节介绍了mybatisPlus的集成和简单使用,本章节开始接着上一章节的用户表,进行Swagger2的集成。现在都奉行前后端分离开发和微服务大行其道,分微服务及前后端分离后,前后端开发的...

oKong
今天
9
0
Python 最小二乘法 拟合 二次曲线

Python 二次拟合 随机生成数据,并且加上噪声干扰 构造需要拟合的函数形式,使用最小二乘法进行拟合 输出拟合后的参数 将拟合后的函数与原始数据绘图后进行对比 import numpy as npimport...

阿豪boy
今天
9
0
云拿 无人便利店

附近(上海市-航南路)开了家无人便利店.特意进去体验了一下.下面把自己看到的跟大家分享下. 经得现场工作人员同意后拍了几张照片.从外面看是这样.店门口的指导里强调:不要一次扫码多个人进入....

周翔
昨天
1
0
Java设计模式学习之工厂模式

在Java(或者叫做面向对象语言)的世界中,工厂模式被广泛应用于项目中,也许你并没有听说过,不过也许你已经在使用了。 简单来说,工厂模式的出现源于增加程序序的可扩展性,降低耦合度。之...

路小磊
昨天
200
1
npm profile 新功能介绍

转载地址 npm profile 新功能介绍 npm新版本新推来一个功能,npm profile,这个可以更改自己简介信息的命令,以后可以不用去登录网站来修改自己的简介了 具体的这个功能的支持大概是在6这个版...

durban
昨天
1
0
Serial2Ethernet Bi-redirection

Serial Tool Serial Tool is a utility for developing serial communications, custom protocols or device testing. You can set up bytes to send accordingly to your protocol and save......

zungyiu
昨天
1
0
python里求解物理学上的双弹簧质能系统

物理的模型如下: 在这个系统里有两个物体,它们的质量分别是m1和m2,被两个弹簧连接在一起,伸缩系统为k1和k2,左端固定。假定没有外力时,两个弹簧的长度为L1和L2。 由于两物体有重力,那么...

wangxuwei
昨天
0
0
apolloxlua 介绍

##项目介绍 apolloxlua 目前支持javascript到lua的翻译。可以在openresty和luajit里使用。这个工具分为两种模式, 一种是web模式,可以通过网页使用。另外一种是tool模式, 通常作为大规模翻...

钟元OSS
昨天
2
0
Mybatis入门

简介: 定义:Mybatis是一个支持普通SQL查询、存储过程和高级映射的持久层框架。 途径:MyBatis通过XML文件或者注解的形式配置映射,实现数据库查询。 特性:动态SQL语句。 文件结构:Mybat...

霍淇滨
昨天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部