文档章节

python 爬虫的学习

嘻嘻哥
 嘻嘻哥
发布于 2015/06/14 21:53
字数 626
阅读 22
收藏 0

以下代码该有的注释都有了,所以就不再解释了

import urllib.request
import urllib.parse
import urllib.error
import os
import re
import shutil    #高层次的文件操作模块

def delete_dir(folder):
    """删除整个目录"""
    shutil.rmtree(folder)

def make_dir(folder):
    """创建并切换到对应的目录"""
    if not os.path.exists(folder):
        os.mkdir(folder)
    os.chdir(folder)

def url_open(url):
    """打开url地址,并返回二进制的字符串数据"""
    req = urllib.request.Request(url)
    req.add_header("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Maxthon/4.4.5.1000 Chrome/30.0.1599.101 Safari/537.36")
    try:
        response = urllib.request.urlopen(req)
    except urllib.error.HTTPError as e:
        print("open url failed!, error code = ", e.code)
    else:
        return response.read()

def get_element_value(url, pattern):
    """按正则表达式在打开的url里匹配满足pattern的所有数据,并返回对应的列表"""
    s = url_open(url).decode('utf-8')
    result_list = re.findall(pattern, s)
    return list(set(result_list)) #去重复

def save_picture(img_src_list):
    """将所有的图片保存到当前目录下"""
    for img_src in img_src_list:
        file_name = img_src.split('/')[-1]
        with open(file_name, 'wb') as f:
            f.write(url_open(img_src))

def download_jiandan_mm_picture(folder, page = 10):
    """下载煎蛋妹子的图片"""
    make_dir(folder)
    
    url = "http://jandan.net/ooxx/"
    page_num = get_element_value(url, r'class="current-comment-page">\[(\d+)\]')
    page_num = int(page_num[0])
    img_src_list = []
    for i in range(page):
        sub_url = url + 'page-' + str(page_num - i) + "#comments"
        s = url_open(sub_url).decode('utf-8')
        img_src_list = re.findall(r'img src="(.*\.jpg)"', s)
        save_picture(img_src_list)

def get_category(url):
    """获取豆瓣妹子主页的分类"""
    result_list = get_element_value(url, r'href="/category/(\d+)">(.*)<')
    dd = dict(result_list)#去掉重复的key
    result_list = [(int(x),dd[x]) for x in dd]
    result_list.sort()

    print("请选择对应的分类:")
    for result in result_list:
        print("%d.\t%s" % (result[0], result[1]))

    select = input("请输入您的选择:")
    return [(result[0], result[1]) for result in result_list if result[0] == int(select)]

def download_douban_meizi_picture(folder, page = 10):
    """下载豆瓣妹子的图片"""
    make_dir(folder)

    url = "http://www.dbmeizi.com/"
    category = get_category(url)
    make_dir(category[0][1])
    url += "category/" + str(category[0][0])
    page_num = get_element_value(url, r'cgidata.page_count=(\d+)')
    page_num = int(page_num[0])
    
    img_src_list = []
    page = page_num if page_num < page else page
    for i in range(page):
        sub_url = url + '?p=' + str(i)
        s = url_open(sub_url).decode('utf-8')
        img_src_list = re.findall(r'data-src="(.*?\.jpg)"', s)#注(.*?\.jpg)里面的?表示采用非贪婪模式
        save_picture(img_src_list)

def main():
    make_dir(r'C:\Users\fgwd\Desktop\妹子图')
    
    select = input("请选择1.抓取煎蛋妹子图,2.抓取豆瓣妹子图. >>>[2]")
    pages = input("请输入抓取的页数. >>>[10]")
    if select == "":
        select = "2"

    if pages == "":
        pages = "10"

    if select == "1":
        folder = r'C:\Users\fgwd\Desktop\妹子图\煎蛋'
        download_jiandan_mm_picture(folder, int(pages))
    elif select == "2":
        folder = r'C:\Users\fgwd\Desktop\妹子图\豆瓣'
        download_douban_meizi_picture(folder, int(pages))
    else:
        print("输入有误")
        return False
    return True
    
if __name__ == "__main__":
    if main():
        print("图片下载完成")



© 著作权归作者所有

共有 人打赏支持
嘻嘻哥
粉丝 0
博文 6
码字总数 8981
作品 0
厦门
高级程序员
私信 提问
王者程序员整理的Python网络爬虫和web的系统学习路线图

最近很多小伙伴找小编咨询,如何系统的学习Python?相信这个论题应该困扰了许多想学习Python的人,今天小编给大家讲一下一个零根底的小白,应该如何体系化的学习Python编程语言,在学习的道路...

dcpeng
2018/09/06
0
0
5个python爬虫教材,让小白也有爬虫可写,含视频教程!

认识爬虫   网络爬虫,如果互联网是一张蜘蛛网,网络爬虫既是一个在此网上爬行的蜘蛛,爬了多少路程即获取到多少数据。 python写爬虫的优势   其实以上功能很多语言和工具都能做,但是用...

柯西带你学编程
2018/06/12
0
0
分享我自己写的一套Python爬虫学习经验

最近在学习Python爬虫,感觉非常有意思,真的让生活可以方便很多。学习过程中我把一些学习的笔记总结下来,还记录了一些自己实际写的一些小爬虫,在这里跟大家一同分享,希望对Python爬虫感兴...

崔庆才
2015/02/23
3.7K
25
从0到1的逆袭之路,Python改变你的学习方式

  随着机器学习的兴起,Python 逐步成为了「最受欢迎」的语言。它简单易用、逻辑明确并拥有海量的扩展包,因此其不仅成为机器学习与数据科学的首选语言,同时在网页、数据爬取可科学研究等...

北北北乐
2018/08/22
0
0
大佬程序员给小白整理出的详细Python爬虫学习路线,机不可失!

Python是一种面向对象、直译式计算机程序设计语言,由Guido van Rossum于1989年底发明。由于他简单、易学、免费开源、可移植性、可扩展性等特点,Python又被称之为胶水语言。下图为主要程序语...

糖宝lsh
01/16
0
0

没有更多内容

加载失败,请刷新页面

加载更多

数据库篇一

数据库篇 第1章 数据库介绍 1.1 数据库概述  什么是数据库(DB:DataBase) 数据库就是存储数据的仓库,其本质是一个文件系统,数据按照特定的格式将数据存储起来,用户可以对数据库中的数据...

stars永恒
8分钟前
0
0
Intellij IDEA中设置了jsp页面,但是在访问页面时却提示404

在Intellij IDEA中设置了spring boot的jsp页面,但是在访问时,却出现404,Not Found,经过查找资料后解决,步骤如下: 在Run/Debug Configurations面板中设置该程序的Working Directory选项...

uknow8692
昨天
1
0
day24:文档第五行增内容|每月1号压缩/etc/目录|过滤文本重复次数多的10个单词|人员分组|

1、在文本文档1.txt里第五行下面增加如下内容;两个方法; # This is a test file.# Test insert line into this file. 分析:给文档后增加内容,可以用sed 来搞定;也可以用while do done...

芬野de博客
昨天
1
0
深入理解JVM—JVM内存模型

深入理解JVM—JVM内存模型 我们知道,计算机CPU和内存的交互是最频繁的,内存是我们的高速缓存区,用户磁盘和CPU的交互,而CPU运转速度越来越快,磁盘远远跟不上CPU的读写速度,才设计了内存...

onedotdot
昨天
1
0
MVC、MVCS、MVVM、MVP、VIPER等这么多架构模式哪一个好呢?

在项目开启阶段,其中一个很重要的环节就是选架构。 那么面对目前已知的这么多架构模式我们该怎么选择呢?这确实是个很让人头疼的问题! 下面我就在这里梳理一下目前常见的一些架构模式。 先...

Java干货分享
昨天
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部