文档章节

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

李狗蛋丶
 李狗蛋丶
发布于 2016/11/23 21:24
字数 808
阅读 284
收藏 1

    在进行老司机开车之一时(即微信开车公众号)无意中发现这样一个福利妹纸图地址,妹纸图都还挺不错的,但是每次翻页的时候各种弹出式广告,非常烦,于是想着把图片都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 BeautifulSoup爬取oschina个人blog文章

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

China_OS
2012/12/21
0
0
使用Python爬虫爬取简单网页(Python爬虫入门)

今天我们来看一看使用Python爬取一些简单的网页。 所用工具:IDLE (Python 3.6 64-bit) 一. 爬取京东商品页面 我将要爬取的是这个东京商品页面信息,代码如下: 二. 爬取亚马逊商品页面 我接...

小_橙_子
08/01
0
0

没有更多内容

加载失败,请刷新页面

加载更多

js实现产生n个随机数,并且随机数之和是固定值

function getrandom(minnum , maxnum ,total,size){ var num = total; //定义整数 var length= size; //定义多个整数的数量 var numArr = []; while(length > 1){ var rnd = Math.floor(Mat......

开源昕昕
18分钟前
2
0
精选Spring Boot三十五道必知必会知识点!

Spring Boot 是微服务中最好的 Java 框架. 我们建议你能够成为一名 Spring Boot 的专家。本文精选了三十五个常见的Spring Boot知识点,祝你一臂之力! 问题一 Spring Boot、Spring MVC 和 Sp...

Java填坑之路
20分钟前
2
0
MyBatis学习笔记

相关文档 mybatis深入理解(一)之 # 与 $ 区别以及 sql 预编译 MyBatis 处理sql中的 大于,小于,大于等于,小于等于

OSC_fly
21分钟前
0
0
Gradle从不同地方复制文件到一个文件夹/打zip包

复制 task copySDK(type: Copy, dependsOn: [":fatJarTask"]) { delete JAR_NAME delete SDK_OUT_PATH delete "$ROOT_BUILD_PATH/$SDK_ZIP_NAME" into('/jniLibs') {......

SuShine
21分钟前
1
0
CentOS关闭占用端口,修改Apache默认端口,并重启Apache

查找并关闭进程 在Linux系统中可以使用lsof命令和kill命令,两个命令配合查找并关闭占用端口的进程 查看某一端口使用情况的命令: lsof -i:端口号 效果如下,PID即进程的ID 根据PID关闭进程,...

临江仙卜算子
27分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部