美文网首页自由世界iOS开发
Python3爬虫(妹子图)

Python3爬虫(妹子图)

作者: Vaayne | 来源:发表于2015-03-27 09:57 被阅读7935次

前言

最近在学习python爬虫,这是一个练手的小项目。
参考资料:

  1. 深入Python3
  2. Python官方文档
  3. 正则表达式30分钟入门教程
  4. 谷歌各种教程

简介

目标网站:煎蛋妹子图

妹子图网站
主要功能:新建一个文件夹,然后爬取页面,下载妹子图,每页的图分别放进一个文件夹,效果如下:
文件夹
文件夹内图片

代码

__author__ = 'Wayne'
import urllib.request
import os
import re

def url_open(url):
    req = urllib.request.Request(url)
    req.add_header('User-Agent','Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:36.0) Gecko/20100101 Firefox/36.0')
    response = urllib.request.urlopen(req)
    return response.read()

def get_page(url):
    html = url_open(url).decode('utf-8')
    pattern = r'<span class="current-comment-page">\[(\d{4})\]</span>' #正则表达式寻找页面地址

    page = int(re.findall(pattern,html)[0])
    return page



def find_imgs(page_url):
    pattern = r'<img src="(.*?\.jpg)"'
    html = url_open(page_url).decode('utf-8')
    img_addrs = re.findall(pattern,html)
    return img_addrs


def save_imgs(img_addrs,page_num,folder):
    os.mkdir(str(page_num))
    os.chdir(str(page_num))
    for i in img_addrs:
        pattern = r'sinaimg.cn/mw600/(.*?).jpg'
        filename = i.split('/')[-1]
        image = url_open(i)
        with open(filename,'wb') as f:
            f.write(image)
            f.close()


def download_mm(folder='ooxx',pages=10):
    os.mkdir(folder) #新建文件夹
    os.chdir(folder) #跳转到文件夹
    folder_top = os.getcwd() #获取当前工作目录
    url = 'http://jandan.net/ooxx/'
    page_num = get_page(url) #获取网页最新的地址
    for i in range(pages):
        page_num -= i #递减下载几个网页
        page_url = url + 'page-' + str(page_num) + '#comments' #组合网页地址
        img_addrs = find_imgs(page_url) #获取图片地址
        save_imgs(img_addrs,page_num,folder) #保存图片
        os.chdir(folder_top)

if __name__ == '__main__':
    folder = input("Please enter a folder(default is 'ooxx'): " )
    pages = input("How many pages do you wan to download(default is 10): ")
    download_mm(str(folder),int(pages))

微信公众号:lyishaou


微信公众号

相关文章

  • Python3爬虫(妹子图)

    前言 最近在学习python爬虫,这是一个练手的小项目。参考资料: 深入Python3 Python官方文档 正则...

  • python爬虫 爬取妹子图片

    不爬妹子图的爬虫不是一只好爬虫。 ----鲁迅主页网址[妹子图...

  • python爬虫 爬取妹子图

    不爬妹子图的爬虫不是一只好爬虫。 ----鲁迅 主页网址唯一图...

  • 爬虫妹子图

    爬虫第二天 其实一直想爬个妹子图,因为网上的教程不计其数,好像都是拿这个作为案例教材来入门的。毕竟实战出真知。昨天...

  • scrapy里面item传递数据后数据不正确的问题

    在上篇文章《python3 + scrapy 爬取妹子图 (meizitu.com)》中,我爬取了妹子图网站的图片...

  • 一、多端展示(uniapp)以及内容发布系统(wordpress

    概述 学习爬虫时发现很多人都用妹子图练手,使用scrapy或者selenium将妹子图的所有图片都爬出来,妹子图是...

  • Nodejs爬虫(妹子图)

    前言 最近在学习Nodejs,想做个小项目练练手,查了一下资料,发现用nodejs做爬虫好像不错,于是参考了这个例...

  • 煎蛋妹子图爬虫

    为了不增加网站的负担,这里只做一个demo,输出一页的图片地址 代码: 煎蛋的网页源代码找不到图片地址,所以我们换...

  • 【注意】妹子图python爬虫

    下方有太过...不含蓄的画面 快闪开 同时 本人刚简书刚开通两天,来的大哥大姐们(小姐姐诶)觉得不错~可以点个关注...

  • [python 爬虫03] 妹子图

    代码 后记 爬虫感觉就像是反编译,从现有的网页里面找出蛛丝马迹,需要仔细和抖机灵。

网友评论

  • 45ba564f605c:python3.5试验了下,发现几个问题:
    1、文件夹名和页数不输入的话会报错,并不能使用缺省值;
    2、def find_imgs(page_url)返回的图片地址只是一部分,缺少http:,直接运行会报403错误;
    3、def save_imgs(img_addrs,page_num,folder)里的folder参数应该没用,代码块内的pattern = r'sinaimg.cn/mw600/(.*?).jpg'也没有用到;
    4、 for i in range(pages):
    page_num -= i #递减下载几个网页
    这里并不能按顺序递减,比如 page_num=240,会依次下载240、239、237、234、230、225、219、212、204、195这10页,不知道你就是这样设计的,还是疏忽了?
    5、 with open(filename,'wb') as f:
    f.write(image)
    f.close()
    with语句会自己关闭文件,所以 f.close()多余了
  • a2997c6ea6b0:感谢分享。
    试验了一下,遇到几个问题,已解决。
    试验环境:Win10,Python3.5, Pycharm 社区版。
    问题一:
    如果在输入文件名的时候直接回车,那么程序报错,并没有启用缺省的参数,而是使用了一个空量作为folder名称导致程序无法新建文件夹。
    解决方法:手动输入文件名即可。
    问题二:
    会提示“ValueError: unknown url type: '//ww2.sinaimg.cn/mw600/马赛克.jpg'”。原因是urllib.request.request不支持这种格式的url,必须在开头加上“http:”。
    解决方法:在url_open函数开头加上“url = re.sub(r'^//*',"http://&quot;, url)”即可。
    问题三:
    在save_imgs函数下,Pycharm提示“ pattern = r'sinaimg.cn/mw600/(.*?).jpg'”是无用语句,我看了一下,好像确实没有用到。
    解决方法:不影响使用,可无视之。

    提到的解决方法都是治标不治本,不知博主可否有空指点一下如何修改更好?
    a2997c6ea6b0:写错了一个地方,应该是url = re.sub(r'^//*',"http://”, url)
  • 大大大大峰哥:可以 用这个网站可以增加学习的乐趣 :no_mouth:
    好想用贴吧的滑稽
  • Fretice:你好 请问如何解决出现403错误 服务器禁止访问的问题的呢 用您的源码去测试还是会出现403的错误
    Fretice:@Vaayne 加了Header 之后还是会遇到 后来听说了 网站应该是设置了反爬虫
    Vaayne:@听说名字叫逗比的都是帅逼 那估计是网站设置障碍了,一般加个header就可以了
  • 链球选手:正在学习爬虫,作为小例子很有用!请问可以转吗?
    链球选手:@Vaayne 谢谢 :stuck_out_tongue_closed_eyes:
    Vaayne:@Cescfangs 可以的,

本文标题:Python3爬虫(妹子图)

本文链接:https://www.haomeiwen.com/subject/ebhnxttx.html