文档章节

python 爬虫的学习

嘻嘻哥
 嘻嘻哥
发布于 2015/06/14 21:53
字数 626
阅读 21
收藏 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 找到一份好工作?这4种工作最热门!

身边有不少朋友最近都开始学习python,大多都在学了一两个月之后来问小编,我现在已经入行了,能去找什么样的工作呢? 小编只能说: 入行!=找工作 那么,自学python的人,如何才能找到满意的工...

python达人
05/16
0
0
5个python爬虫教材,让小白也有爬虫可写,含视频教程!

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

柯西带你学编程
06/12
0
0
王者程序员整理的Python网络爬虫和web的系统学习路线图

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

dcpeng
09/06
0
0
Python学到什么程度才可以去找工作?掌握这4点足够了!

大家在学习Python的时候,有人会问“Python要学到什么程度才能出去找工作”,对于在Python培训机构学习Python的同学来说这都不是问题,因为按照Python课程大纲来,一般都不会有什么问题,而对...

p柯西
06/27
0
0
2个月精通Python爬虫——3大爬虫框架+6场实战+分布式爬虫,包教包会

阿里云大学在线工作坊上线,原理精讲+实操演练,让你真正掌握云计算、大数据技能。 在第一批上线的课程中,有一个Python爬虫的课程,畅销书《精通Python网络爬虫》作者韦玮,带你两个月从入门...

云木西
06/27
0
0

没有更多内容

加载失败,请刷新页面

加载更多

正弦 余弦 角度 用于画时钟

<html> <head> <title>时钟</title> </head> <style> #canvas{ background: #1977ca } </style>......

一箭落旄头
32分钟前
2
0
drupal7自定义模块之表单(新手向)

前段时间要给网站做个高级搜索的功能,但drupal7自带的搜索远远无法满足需求,便有了自己开发的需求 我以前没有接触过drupal,做这个功能也是困难重重,几乎是从零开始,我将目光放到了自定义模块...

gcudwork
37分钟前
1
0
驰狼课堂

http://www.chilangedu.com/

求是科技
54分钟前
0
0
jumpserver 报错"Incorrect string value

申明 本文所有内容参考自jumpserver记录命令无法入库问题 #1773 简介 jumpserver 1.4.0在jumpserver.log中大量报错,错误日志 File "/opt/jumpserver/apps/terminal/api.py", line 246, i...

zhnxin
今天
2
0
用户管理相关配置文件及命令

9月19日任务 2.27linux和windows互传文件 3.1 用户配置文件和密码配置文件 3.2 用户组管理 3.3 用户管理 扩展知识 实用小工具 简单命令行下实现Linux/Windows文件互传 前提:使用远程工具Xsh...

robertt15
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部