做了一个爬取妹子图某张索引页面的爬虫,主要用request和正则表达式。

  感谢 崔庆才大神的 爬虫教学视频 和 gitbook:

     B站:https://www.bilibili.com/video/av18202461/index_1.html

     gitBook:https://legacy.gitbook.com/book/germey/python3webspider/details

  

  源码:

  

#! user/bin/python
# coding=utf-8

import os
import re
import requests
from requests.exceptions import RequestException
from hashlib import md5

def download_from_detail(url):
    item = get_dict(url)
    save_images(item)

def get_dict(url):
    """
    :param url:
    :return:   {"title","image_url_list"}
    """
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.117 Safari/537.36"
    }
    try:
        response = requests.get(url, headers=headers)
    except RequestException:
        print("request error")
        return None
    if response.status_code == 200:
        # parse html from gb2312 to utf-8
        response.encoding = "gb2312"
        html = response.text
        title = re.search('<title>(.*?)</title>', html, re.S).group(1).split()[0]
        images_url = re.findall('<img alt=.*?src="(.*?)" /><br />', html)
        return {
            "title": title,
            "images_url": images_url
        }
    else:
        return None

def save_images(item):
    """
        save image in file which name is title
    :param item:
    :return:
    """
    if not item:
        return

    # 1 affirm if directory exists
    if not os.path.exists(item["title"]):
        os.mkdir(item["title"])
    # 2 save all the images into folder
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.117 Safari/537.36"
    }
    for url in item["images_url"]:
        try:
            image_response = requests.get(url, headers=headers)
        except RequestException:
            print("request image error")
            continue
        file_name = "{0}/{1}.{2}".format(item["title"], md5(image_response.content).hexdigest(), "jpeg")
        with open(file_name, "wb") as image_file:
            image_file.write(image_response.content)
            print("{0} writing successfully".format(file_name))

def get_page_index(url):
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.117 Safari/537.36"
    }
    try:
        response = requests.get(url, headers=headers)
        response.encoding="gb2312"
    except RequestException:
        print("request image error")
    if response.status_code == 200:
        page_index_urls = re.findall('<a href="(.*?)".*?target=\'_blank\'>',response.text,re.S)
        for url in page_index_urls:
            download_from_detail(url)

if __name__ == "__main__":
    url = "http://www.meizitu.com/a/pure.html"
    get_page_index(url)

主要问题:

  ① gb2312 转 utf-8

    

    response.encoding="gb2312"

  

requests+正则表达式 爬取 妹子图的更多相关文章

  1. Python 爬虫入门(二)——爬取妹子图

    Python 爬虫入门 听说你写代码没动力?本文就给你动力,爬取妹子图.如果这也没动力那就没救了. GitHub 地址: https://github.com/injetlee/Python/blob ...

  2. Python 爬虫入门之爬取妹子图

    Python 爬虫入门之爬取妹子图 来源:李英杰  链接: https://segmentfault.com/a/1190000015798452 听说你写代码没动力?本文就给你动力,爬取妹子图.如果 ...

  3. requests+正则表达式爬取ip

    #requests+正则表达式爬取ip #findall方法,如果表达式中包含有子组,则会把子组单独返回出来,如果有多个子组,则会组合成元祖 import requests import re def ...

  4. PYTHON 爬虫笔记八:利用Requests+正则表达式爬取猫眼电影top100(实战项目一)

    利用Requests+正则表达式爬取猫眼电影top100 目标站点分析 流程框架 爬虫实战 使用requests库获取top100首页: import requests def get_one_pag ...

  5. 爬取妹子图(requests + BeautifulSoup)

    刚刚入门爬虫,今天先对于单个图集进行爬取,过几天再进行翻页爬取. 使用requests库和BeautifulSoup库 目标网站:妹子图 今天是对于单个图集的爬取,就选择一个进行爬取,我选择的链接为: ...

  6. Requests+正则表达式爬取猫眼电影

    目标 提取出猫眼电影TOP100的电影名称.时间.评分.图片等信息,提取站点的URL为http://maoyan.com/board/4,提取的结果以文本的形式保存下来. 准备工作 请安装好reque ...

  7. scrapy 也能爬取妹子图?

    目录 前言 Media Pipeline 启用Media Pipeline 使用 ImgPipeline 抓取妹子图 瞎比比前言 我们在抓取数据的过程中,除了要抓取文本数据之外,当然也会有抓取图片的需 ...

  8. 使用Requests+正则表达式爬取猫眼TOP100电影并保存到文件或MongoDB,并下载图片

    需要着重学习的地方:(1)爬取分页数据时,url链接的构建(2)保存json格式数据到文件,中文显示问题(3)线程池的使用(4)正则表达式的写法(5)根据图片url链接下载图片并保存(6)MongoD ...

  9. Requests+正则表达式爬取猫眼电影(TOP100榜)

    猫眼电影网址:www.maoyan.com 前言:网上一些大神已经对猫眼电影进行过爬取,所用的方法也是各有其优,最终目的是把影片排名.图片.名称.主要演员.上映时间与评分提取出来并保存到文件或者数据库 ...

随机推荐

  1. python 函数名的应用(第一类对象),闭包,迭代器

    1.函数名的应用(第一类对象) 函数名的命名规范和变量是一样的 函数名其实就是变量名 可以作为列表中的元素进行储存. def func1(): pass def func2(): pass lst = ...

  2. Java中split的用法

    Java中的我们可以利用split把字符串按照指定的分割符进行分割,然后返回字符串数组,下面是string.split的用法实例及注意事项:java.lang.string.splitsplit 方法 ...

  3. oracle 中GROUP BY的用法

    转自:http://blog.csdn.net/basenet855x/article/details/6694150 问题: select item.itemnum,item.in1,item.in ...

  4. sql查询语句常用例子

    1.查找与jams在同一个单位的员工姓名.性别.部门和职称:select emp_no, emp_name, dept, title  from employee where emp_name< ...

  5. python学习——练习题(9)

    """ 题目:暂停一秒输出. 程序分析:使用 time 模块的 sleep() 函数. http://www.runoob.com/python/python-date- ...

  6. application-defined exception

    dataSnap服务器,客户端调用的时候写错了一句话, SQLConnection1->CloneConnection(); 改为 SQLConnection1->Close(); 就好了 ...

  7. js中格式化时间

    //时间格式化 Date.prototype.Format = function (fmt) { var o = { "M+": this.getMonth() + 1, &quo ...

  8. 运行django项目出现Invalid HTTP_HOST header: '192.168.1.111:8000'. You may need to add '192.168.1.111' to ALLOWED_HOSTS

    Request Method: GET Request URL: http://202.201.38.70:8000/angular Django Version: 1.11.3 Exception ...

  9. Linux下git使用详解1

    1. git使用第一步:安装git $ sudo apt-get install git-core #ubuntu系统下使用apt-get $ yum install git-core #译者注,在r ...

  10. ZTree 获取选中的项,jQuery radio的取值与赋值

    $("input[name='Sex']:checked").val();//取值 $("input[name='radioName'][value=2]"). ...