文档章节

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

李狗蛋丶
 李狗蛋丶
发布于 2016/11/23 21:24
字数 808
阅读 292
收藏 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爬虫如何快速上手,并达到爬取大规模数据的水平

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

技术小能手
06/28
0
0
学习python12小时后,告诉想学爬虫的你,别怕,爬虫,没那么难抓

怎样学编程 编程就如同你学习开车,即使,你可以一口气,说出一辆车的全部零部件,以及内燃机进气、压缩、做功和排气过程,但你就是不去练如何开车,怎么上路。你确定,你敢开吗?你敢开,我...

糖宝lsh
10/06
0
0
使用Python爬虫爬取简单网页(Python爬虫入门)

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

小_橙_子
08/01
0
0
推荐几个适合新人上手的Python项目

人生苦短,我用Python! Python的前景光明不许要过多赘述了,那么作为新人如何快速上手这门语言呢?废话不多说,今天给大家分享三个极实用的Python爬虫案例。 1 爬取网站美图 爬取图片是最常...

芜湖达内科技
06/25
0
0
Python BeautifulSoup爬取oschina个人blog文章

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

China_OS
2012/12/21
0
0

没有更多内容

加载失败,请刷新页面

加载更多

day152-2018-11-19-英语流利阅读-待学习

外媒看吴亦凡刷榜事件 Lala 2018-11-19 1.今日导读 近日,吴亦凡的专辑在国外陷入了刷榜风波,他的新专辑霸占了单曲榜前三名,并且前十名他占据了七席,力压美国乐坛巨星 Lady Gaga 和 A 妹,...

飞鱼说编程
42分钟前
9
0
开源 java CMS - FreeCMS2.8 微信管理 群发图文消息

项目地址:http://www.freeteam.cn/ 群发图文消息 管理员可以在这里群发图文消息 此列表只提取已审核并且带信息图片的数据! 选择需要群发的消息,点击“群发图文消息”按钮。 微信的限定: ...

freeteam
51分钟前
1
0
Beautiful Soup

定义 Python中的一个库,主要用于从网页爬取数据; 安装 pip install beautifulsoup4 四大对象 Beautiful Soup将复杂的HTML文档转换成树形结构,树中的每个节点都是Python对象,对象可归纳为...

村雨1943
今天
5
0
Visual Studio 昨日发布新版本:增加实时同步编程、共同调试

多名开发者可以在同一个项目中编程,在编写代码和调试代码时只需发送一个 URL 网址,就能邀请他人参与协作,而且无需重新配置开发环境和安装任何附加包。该服务支持 Windows、Mac 与 Linux ...

linuxCool
今天
8
0
发现一种不错的学习方法

这是在《软技能,代码之外的生存之道》所看到的一种学习方法,感觉这个理念不错,分享出来,共勉。 我的「十步学习法」 多年以来,我都承受着巨大的压力:快速学习新技术、新编程语言、新框架...

firepation
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部