爬取网站的思路

第一步:首先分析爬取网站的连接地址特性,发现翻页图片的时候连接:http://www.mmjpg.com/mm/1570  ,http://www.mmjpg.com/mm/1569,只有后面的数字会变化

第二步:然后翻页1,2,3,用检查(查看源代码)来获取翻页的数字

第三步:查看图片的地址,保存后并写入文件内

思路就是这样的一个思路,具体用代码梳理具体的思路

第一步:

首先写一个主函数:包括:url,url后面的索引:index(1570),翻页(1,2),下载的图片地址;并且采用函数封装的思路

def main(index):#1、写url地址main_url = 'http://www.mmjpg.com/mm/%s' % index#2、获取翻页地址,写一个get_page()函数page = get_page(main_url)if os.path.exists(path) != True:os.mkdir(path) #创建工作目录#print(path)else:os.chdir(path) #切换到工作目录#3、遍历所有页,获取图片的地址for i in range(1, int(page) + 1):url = '%s/%s' % (main_url, i)try:get_img(url)  #获取图片地址except Exception as e:raise e

第二步:

抓取index,用函数封装写

1、用网页检查拿到1570的html
''''<li><a href="http://www.mmjpg.com/mm/1570" target="_blank">切出来1570这个数字'''
#获取http://www.mmjpg.com/mm/1570的index:如:1570,1569
def get_index():#2、获取网页的htmlr = requests.get('http://www.mmjpg.com', headers=headers)r.encoding = 'utf-8'html = r.text#3、etree.HTML():构造了一个XPath解析对象并对HTML文本进行自动修正。#etree.tostring():输出修正后的结果,类型是bytesselector = etree.HTML(html)#4、获取<li><a标签下的内容,[0]取第一个content = selector.xpath('//li/a')[0]#5、继续取href的内容,[0]取第一个:即:http://www.mmjpg.com/mm/1570num = content.xpath('@href')[0]#6、已斜杠为切片,获取不同的字符,即:['http:', '', 'www.mmjpg.com', 'mm', '1570']num = num.split('/')#7、取num最后一个字符,并强制转换成整形num = int(num[-1])#返回所有的index:1570,1569return range(1, num + 1)# for each in range(1,num+1):#     print(each)

第三步:

获取翻页的1,2,3

#1、鼠标放到翻页的1上面右键检查,得到以下内容
'''
<div class="page" id="page"><em class="ch preno">没有了</em><em>1</em><a href="/mm/1570/2">2</a><a href="/mm/1570/3">3</a><a href="/mm/1570/4">4</a><a href="/mm/1570/5">5</a><a href="/mm/1570/6">6</a><i></i><a href="/mm/1570/50">50</a><em class="ch all" id="opic" οnclick="openall(1);">全部图片</em><a href="/mm/1570/2" class="ch next">下一张</a></div>
'''
def get_page(url):r = requests.get(url, headers=headers)r.encoding = 'utf-8'html = r.textselector = etree.HTML(html)#2、获取所有页:1、2...50、下一页,即获取下面<a>2<a>的2,3,4,5,6...50page = selector.xpath('//div[@id="page"]/a/text()')[-2]

第四步:

获取图片地址

#1、鼠标放到图片上,右键检查,获取以下内容
'''
<div class="content" id="content"><a href="http://www.mmjpg.com/mm/1570/2"><img src="http://fm.shiyunjj.com/2018/1570/1i28.jpg" data-img="http://fm.shiyunjj.com/2018/1570/1i28.jpg" alt="萌味十足的小尤奈雪白胴体相当性感"></a>
</div>
'''
#通过图片的地址来获取图片
def get_img(url):r = requests.get(url, headers=headers)r.encoding = 'utf-8'html = r.textselector = etree.HTML(html)try:#2、取img标签下的内容content = selector.xpath('//div[@id="content"]/a/img')[0]#3、获取图片url地址img_url = content.xpath('@src')[0]#4、取图片名字title = content.xpath('@alt')[0]#5、 #保存标题和对应的url地址
        sav_img(title, img_url) except Exception as e:print('Erro!!!')pass        

第六步:

编写__name__

if __name__ == '__main__':indexs = get_index()#reversed()函数是返回序列seq的反向访问的迭代子,因为get_index()返回的是1570,1569,1568这样的序列,反向就是从1568,1569,1570for index in reversed(indexs):main(index)

完整的代码如下:

import requests
import os
from lxml import etreeheaders = {'Referer': 'http://www.mmjpg.com/mm/','User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36'
}#返回当前进程的工作目录
path = os.getcwd() + '\img'def get_index():r = requests.get('http://www.mmjpg.com',headers = headers)r.encoding= 'utf-8'html = r.textselector = etree.HTML(html)content = selector.xpath('//li/a')[0]num = content.xpath('@href')[0]num = num.split('/')num = int(num[-1])return range(1,num+1)def get_page(url):r = requests.get(url,headers=headers)r.encoding = 'utf-8'html = r.textselector = etree.HTML(html)page = selector.xpath('//div[@id="page"]/a/text()')[-2]return (page)def get_img(url):r = requests.get(url,headers=headers)r.encoding = 'utf-8'html = r.textselector = etree.HTML(html)try:content = selector.xpath('//div[@id = "content"]/a/img')[0]img_url = content.xpath('@src')[0]title = content.xpath('@alt')[0]save_img(title,img_url)except Exception as e:print('Erro!!!')passdef save_img(name,url):name = name + '.jpg'if name in os.listdir(path):print('重复文件')else:r = requests.get(url,headers=headers)with open(name,'wb') as f:f.write(r.content)print(name)def main(index):main_url = 'http://www.mmjpg.com/mm/%s'%indexpage = get_page(main_url)if os.path.exists(path)!= True:os.mkdir(path)else:os.chdir(path)for i in range(1,int(page)+1):url = '%s/%s'%(main_url,i)try:get_img(url)except Exception as e:raise eif __name__ == '__main__':index = get_index()for index in reversed(index):main(index)

转载于:https://www.cnblogs.com/frankruby/p/10136727.html

【Python56--爬取妹子图】相关推荐

  1. python多线程爬取妹子图

    python多线程爬取妹子图 python使用版本: 3.7 目的: 自己选择下载目录,逐个将主题图片保存到选定目录下. 效果: 一秒钟左右下载一张图片,下了七八十组图片暂时没什么问题,不放心的话,可 ...

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

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

  3. python爬虫-爬妹子图_Python 爬虫入门之爬取妹子图

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

  4. python爬虫妹子图_Python 爬虫入门(二)——爬取妹子图

    Python 爬虫入门 听说你写代码没动力?本文就给你动力,爬取妹子图.如果这也没动力那就没救了. 公众号:[智能制造社区].欢迎关注,分享智能制造与编程那些事. 爬虫成果 当你运行代码后,文件夹就会 ...

  5. 爬取妹子图(python):爬虫(bs+rq)+ gevent多线程

    爬取妹子图(python):爬虫(bs+rq)+ gevent多线程 简介 我观察爬取妹子图算是爬虫专业户必做的事情之一,所以我也做了一个,结果是有3.45GB,49847张图. 打算依靠这个图库做个 ...

  6. Python 爬取妹子图02

    爬取laotuzi.com这个网站的图片 原本想爬的是妹子图这个网站的,结果应该是IP被封了,用电脑连接WiFi访问不了这个网站,我以为是断网了,但访问其他网站有能正常访问,用手机流量访问妹子图网站, ...

  7. python3 + scrapy爬取妹子图(meizitu.com)

    前言 在学会scrapy之前,都是用requests + BeautifulSoup + lxml来爬取的,这样也能爬到想要的东西,但缺点是代码有些乱,可能需要自己对项目进行梳理归类.而scrapy框 ...

  8. Python爬虫 - scrapy - 爬取妹子图 Lv1

    0. 前言 这是一个利用python scrapy框架爬取网站图片的实例,本人也是在学习当中,在这做个记录,也希望能帮到需要的人.爬取妹子图的实例打算分成三部分来写,尝试完善实用性. 系统环境 Sys ...

  9. Scrapy 实战之爬取妹子图

    阅读文本大概需要 10 分钟. 很多人说爬虫这门技术非常有趣,但不知道如何入门.其实爬虫入门非常简单,难的部分在于各大网站的反爬机制.当然对于一些简单的网站,还是非常容易爬取. 学习爬虫首先要明确你的 ...

  10. python项目-爬取妹子图

    最近在学爬虫,写了一个爬取妹子图片 功能:自动下载妹子图,并自动命名 网址:http://www.netbian.com/meinv/ #!/usr/bin/env python # -*- codi ...

最新文章

  1. 【ARM-Linux开发】【CUDA开发】【深度学习与神经网络】Jetson Tx2安装相关之二
  2. matlab光滑曲线连接散点图
  3. 画活动图教程_绘画教程116—传统的山水现代的刀画,看了就会的步骤图
  4. linux grep 显示多行信息
  5. python基础_格式化输出(%用法和format用法)(转载)
  6. leetcode 309. Best Time to Buy and Sell Stock with Cooldown | 309. 最佳买卖股票时机含冷冻期(动态规划)
  7. 使用Json让Java和C#沟通的方法
  8. 将Win10包含中文的用户名改为英文的,解决Anaconda navigator无法运行jupyter的问题
  9. phpstorm 2017.1 激活
  10. pku 2387 Til the Cows Come Home
  11. (完整版)原因可能是堆被损坏,这也说明 中或它所加载的任何DLL 中有bug】的解决
  12. mysql将日期转换年份_mysql将日期转换为当前年份的相同日期
  13. 【物联网】NB-IoT和LoRa技术简介
  14. m-bom,p-bom,e-bom 这是什么意思
  15. 多项式拟合缺点_常见算法优缺点
  16. 做项目与做产品的区别详解
  17. matlab 画多边形,[转载]matlab多边形绘制
  18. 美国访问学者J1签证申请材料准备
  19. Mybatis源码解析——入门级
  20. 程序员如何做副业?35岁前,千万别让死工资绊住你赚钱的步伐

热门文章

  1. 210页的《pandas官方文档中文版》.pdf
  2. 【九天教您南方cass 9.1】 10 DTM土方计算的四种方法
  3. Python——对象
  4. 使用inno setup制作安装包
  5. CSDN页面完美格式打印
  6. java URl 匹配器
  7. 大篆汉字对照表_篆书隶书千字对照表(一)
  8. Qt+VS2015+番茄助手 个人常用快捷键集锦
  9. 谈谈eXeScope这款exe修改器
  10. powerbuilder11.5 免安装 时的注意事项