妹子图爬取__正则实现

妹子图爬取

页面链接

正则实现代码:

import re
import requests
import os
hehehe = os.getcwd()

headers = {
    ‘User-Agent‘: "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1",
    ‘Referer‘: ‘http://i.meizitu.net‘}

# 获取all页面的html文本
def get_root_html(root_url):
    all_page_url = requests.get(root_url, headers=headers)
    if all_page_url.status_code == 200:
        return all_page_url.text
    return "页面获取失败"

# 解析all页面, 获取里面所有项目的url
def parse_root_html(root_html):
    all_url_re = r‘<a\shref="(http://www.mzitu.com/\d+)"\starget="_blank"‘
    pattern = re.compile(all_url_re)
    all_url_list = re.findall(pattern, root_html)
    return all_url_list

# 获取单个项目的页面
def get_one_page_html(one_page_url):
    one_page_html = requests.get(one_page_url, headers=headers)
    return one_page_html.text

# 解析单个项目的页面, 获取该项目一共有多少张图片, 然后组合每一张照片所在的url
def parse_one_page_html(one_page_html, one_page_url):
    # 获取存在最大页数的那个div标签
    pattern = re.compile(r‘<div\sclass="pagenavi">.*?</div>‘, re.S)
    div = re.findall(pattern, one_page_html)
    # 获取div内所有的span标签
    pattern1 = re.compile(r‘<span.*?</span>‘, re.S)
    one_page_url_list = re.findall(pattern1, div[0])
    # 最大页数的数字在返回的span列表的倒数第二项, 得到这个span标签内的数字即: 该项目的最大页数
    # print(one_page_url_list[-2])
    max_num_re = r‘\d+‘
    pattern2 = re.compile(max_num_re)
    max_num = re.findall(pattern2, one_page_url_list[-2])

    # print(max_num[0])
    max_num = max_num[0]
    every_img_page_list = []
    for i in range(int(max_num)):
        one_img_url = str(one_page_url) + ‘/‘ + str(i)
        every_img_page_list.append(one_img_url)
    return every_img_page_list

# 为该项目在当前路径下, 创建文件夹
def mkdir_folder(one_page_html):
    folder_name_re = r‘<h2\sclass="main-title">(.*?)</h2>‘
    pattern = re.compile(folder_name_re, re.S)
    folder_name = re.findall(pattern, one_page_html)[0]
    # 我注意到有个标题带有 ?  这个符号Windows系统是不能创建文件夹的所以要替换掉
    path = str(folder_name).replace("?", ‘_‘)
    path = path.strip()

    isExists = os.path.exists(os.path.join(str(hehehe), path))
    if not isExists:
        os.makedirs(os.path.join(str(hehehe), path))
        os.chdir(os.path.join(str(hehehe), path))  # 切换到目录
    print(folder_name + "文件创建成功")
    return folder_name

# 获取图片的地址
def get_img_url(one_img_page_url):
    one_img_page_html = requests.get(one_img_page_url, headers=headers)
    ong_img_re = r‘<img\ssrc="(.*?)"\salt=".*?"‘
    pattern = re.compile(ong_img_re, re.S)
    one_img_url = re.findall(pattern, one_img_page_html.text)[0]
    # print("一个图片的地址:"+str(one_img_url))
    return one_img_url

# 下载图片
def download_one_img(one_img_url, folder_name):
    # print(one_img_url)
    # print(type(one_img_url))
    img = requests.get(one_img_url, headers=headers)
    file_name = one_img_url[-6:]
    print("正在下载图片:" + str(file_name))
    f = open(str(file_name), ‘wb‘)
    f.write(img.content)
    f.close()

# 该爬虫的总控制函数体
def main(root_url):
    root_html = get_root_html(root_url)
    all_url_list = parse_root_html(root_html)
    for i in range(5):
        one_page_html = get_one_page_html(all_url_list[i])
        folder_name = mkdir_folder(one_page_html)
        every_img_page_list = parse_one_page_html(
            one_page_html, all_url_list[i])
        for i in range(len(every_img_page_list)):
            one_img_url = get_img_url(every_img_page_list[i])
            download_one_img(one_img_url, folder_name)

if __name__ == "__main__":
    main(‘http://www.mzitu.com/all‘)

原文地址:https://www.cnblogs.com/amou/p/9206528.html

时间: 2024-07-31 18:37:54

妹子图爬取__正则实现的相关文章

简单的爬取并下载图片的程序

闲来无事就编写了一个爬取美女图片并下载的爬虫.看好多爬虫都是爬妹子图的我就写编写了一个爬取妹子图网站上的图片. 需求:将妹子图网站上的首页到73页正文中的妹子图片爬取下来并保存在当前目录下 思路:通过查看网站的源代码发现,网站展示的图片都是有html链接的,每个图片都会链接到新的网址,来展示一个美女的多张图片.于是,需要先将以及界面的链接爬取出来,然后进入二级界面开始爬取并下载图片. 程序效果:通过简单的一个程序实现了图片的下载,在连续爬取了一个小时左右的时间爬取了大概有1000张图片.  遇到

Python爬虫入门教程 2-100 妹子图网站爬取

前言 从今天开始就要撸起袖子,直接写Python爬虫了,学习语言最好的办法就是有目的的进行,所以,接下来我将用10+篇的博客,写爬图片这一件事情.希望可以做好. 为了写好爬虫,我们需要准备一个火狐浏览器,还需要准备抓包工具,抓包工具,我使用的是CentOS自带的tcpdump,加上wireshark ,这两款软件的安装和使用,建议你还是学习一下,后面我们应该会用到. 网络请求模块requests Python中的大量开源的模块使得编码变的特别简单,我们写爬虫第一个要了解的模块就是requests

Python爬虫入门【2】:妹子图网站爬取

妹子图网站爬取---前言 从今天开始就要撸起袖子,直接写Python爬虫了,学习语言最好的办法就是有目的的进行,所以,接下来我将用10+篇的博客,写爬图片这一件事情.希望可以做好. 为了写好爬虫,我们需要准备一个火狐浏览器,还需要准备抓包工具,抓包工具,我使用的是CentOS自带的tcpdump,加上wireshark ,这两款软件的安装和使用,建议你还是学习一下,后面我们应该会用到. 妹子图网站爬取---网络请求模块requests 妹子图网站爬取---安装requests 打开终端:使用命令

妹子图数网页爬取

任务:将妹子图首页展示的200多页数据全部爬取下来 在爬取的过程中,需要用到requests库来获取网页 使用bs库来解析网页 随后将图片以图集的形式保存到文件汇总 首先是获取所有图集url的函数 import requests from bs4 import BeautifulSoup as bs import threading import time import os def get_base_url(): """ 获取妹子图的所有图集url,并返回url组成的列表

04 爬取妹子图最热图片

参考链接:https://github.com/wzyonggege/Mzitu-Crawler/blob/master/mzitu.py 项目地址: copywang/spiders_collection 实验功能 爬取 http://www.mzitu.com/hot/ 的文章图片 先请求http://www.mzitu.com/hot/ 首页 分析首页HTML代码,用正则表达式获取一共有多少后翻页数,后续的url格式是http://www.mzitu.com/hot/页码 在"http:/

Python3网络爬虫(十):这个帅哥、肌肉男横行的世界(爬取帅哥图)

"-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> Python3网络爬虫(十):这个帅哥.肌肉男横行的世界(爬取帅哥图) - Jack-Cui - 博客频道 - CSDN.NET Jack-Cui 努力-是为了将运气成分降到最低 目录视图 摘要视图 订阅 [活动]2017 CSDN博客专栏评选 &nbsp [5月书讯

spider_爬取斗图啦所有表情包(图片保存)

"""爬取斗图吧里面的所有表情包 知识点总结: 一.使用requests库进行爬取,随机请求头(网站反爬措施少.挂个请求头足矣) 二.具体思路: 1.先爬取所有的图片url,放在列表里 2.循环遍历url请求这些图片, 3.将图片进行分类保存三.分类保存用到一个知识点,endwith(以***结尾) 使用这个函数,将jpg,gif,png等不同类型的图片分开四.演示案例中,只爬取了前20页.五.各个定义的数字变量意思为: n=1 网页页数 num=1 保存图片数 注:该案例主

用 Python 爬取网易严选妹子内衣信息,探究妹纸们的偏好

今天继续来分析爬虫数据分析文章,一起来看看网易严选商品评论的获取和分析. ? 网易商品评论爬取 分析网页 ? 评论分析 进入到网易严选官网,搜索“文胸”后,先随便点进一个商品. ? 在商品页面,打开 Chrome 的控制台,切换至 Network 页,再把商品页面切换到评价标签下,选择一个评论文字,如“薄款.穿着舒适.满意”,在 Network 中搜索. ? 可以发现,评论文字是通过 listByItemByTag.json 传递过来的,点击进入该请求,并拷贝出该请求的 URL: https:/

scrapy爬取斗图表情

用scrapy爬取斗图表情,其实呀,我是运用别人的博客写的,里面的东西改了改就好了,推存链接" http://www.cnblogs.com/jiaoyu121/p/6992587.html " 首先建立项目:scrapy startproject doutu 在scrapy框架里先写自己要爬取的是什么,在item里面写. import scrapyclass DoutuItem(scrapy.Item): # define the fields for your item here