做了一个爬取妹子图某张索引页面的爬虫,主要用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. DataTable 树形构造加全部

    DataTable dtGx = new DataTable(); dtGx = SqlHelper.SqlGetDataTable(StrSql, "tbUserGx"); th ...

  2. lamp与lnmp的选择

    lnmp和lamp业务上的不同 由于二者仅仅是区别在于web的选择,nginx更高效,占用资源更少,详情区别查看LNMP环境应用实践 lnmp和lamp安装上的不同 生产环境中,可能会遇到lamp架构 ...

  3. linux 下java环境的配置

    注意:这里选择下载jdk并自行安装,而不是通过源直接安装(apt-get install) 1.下载jkd( http://www.oracle.com/technetwork/java/javase ...

  4. css3的transition属性的使用

    transition是将某个属性从一个属性值在指定的时间内平滑过渡到另一个属性值来实现动画效果.这个属性一般搭配:hover来使 下面看一个例子:鼠标放在div上,0.2s后将div元素的背景色用一秒 ...

  5. JAVA中return的用法

    public class TestReturn { public static void main(String args[]) { TestReturn t = new TestReturn(); ...

  6. G++ 4.4.7 无法编译模板程序,Vs可以,和解?智者尾部留言,本人第一次使用vs pro,通常并且习惯在linux下写些小东西,虽然程序简单;

    vs 模板编译运行Ok \ linux g++ 4.4.7编译模板测试程序,报无法定义 template <typename or class 中的 AnyType> 类型的数据 Exam ...

  7. IIS Manager 配置文件修该,允许跨域CORS访问

    IIS Manager 配置文件修该,允许跨域CORS访问 IIS Manager 的api访问会出现跨域问题,需要 IIS Manager的配置文件中修改. 配置文件的路径:C:\Program F ...

  8. AndroidManifest.xml中声明权限——各种permission含义摘录

    android.permission.EXPAND_STATUS_BAR 允许一个程序扩展收缩在状态栏,android开发网提示应该是一个类似Windows Mobile中的托盘程序 android. ...

  9. Linux Centos 7 RabbitMQ 安装

    下载地址:http://www.rabbitmq.com/releases/rabbitmq-server/ 找到rabbitmq-server-3.6.15-1.el7.noarch.rpm 第一步 ...

  10. SignalR web实时同步 消息推送 广播

    源码:https://github.com/SignalR/SignalR demo:http://download.csdn.net/download/qq_21533697/9702791#com ...