介绍:      

网易有一个图片社交网站叫LOFTER (乐乎),网站中有大量的晒图,其中不乏有各种“美好”的图片,当然我指的是摄影师的作品。通过爬虫来爬取乐乎网站的图片,网站链接:    http://www.lofter.com/   ,当然类似的这种网站结构都可以套用本文中的代码,只需在提取 规则上改动,如百度贴吧中的图片,壁纸图片网页。并且这些网站一般没有反爬虫机制,毕竟要考虑经济成本,本身就没哟什么数据价值的东西,索性随便爬吧。本例只是练习使用,并没有实际价值。

使用的库:

发送请求常用的两个库:urllib2和requests,requests库时基于urllib3实现。

通过lxml库来解析response:使用lxml前注意先确保html经过了utf-8解码,即code = html.decode('utf-8', 'ignore'),否则会出现解析出错情况。因为中文被编码成utf-8之后变成 '/u2541' 之类的形式,lxml一遇到 “/”就会认为其标签结束。因此还要导入urllib库进行Unicode转码。

网页提取特定数据的方式:

(1)使用正则表达式,缺点繁琐使用难度大,优点一旦把正则用6之后就可以在很多方面使用

(2)使用xpath,在浏览器中通过安装xpath插件,可以在浏览器中实验,然后在编码中实现。查找数据简单,直接可以根据网页标签和属性定位要提取的数据

(3)使用BeautifulSoup,同样是在爬虫中经常使用,安装并导入bs4库,可以指定网页标签,还可以根据css规则,使用css选择器进行提取。使用简单,但是效率较前两种低(这种比较只是相对之间的,在使用过程中几乎不影响效率)

效果和代码实现:

#!/usr/bin/env python
# -*- coding:utf-8 -*-import urllib
import urllib2
from lxml import etree
import timeclass LofterSpider(object):def __init__(self):# 加入user_Agent模拟真实的浏览器访问,反爬的手段self.headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko"}self.base_url = "http://fenchenyue.lofter.com/"self.begin_page = int(begin_page)self.end_page = int(end_page)def send_request(self, url):try:# 发送request请求,如果是post请求,需要加一个data参数,在浏览器检查-headers中,form-data参数,改成字典形式request = urllib2.Request(url, headers=self.headers)# 得到response网页response = urllib2.urlopen(request)return response.read()except Exception, err:print "[ERROR]: 请求发送失败..."def load_page(self, html):html_obj = etree.HTML(html)# 2. 通过xpath提取数据,如果当前结点取不到数据,就往上一级查找。link_list = html_obj.xpath("//div[@class='index']/ul/li/a/@href")# xpath得到的是一个所有符合条件的列表。这里得到的是每个网页中二层链接for link in link_list:html = self.send_request(link)self.load_image(html)def load_image(self, html):# 使用etree对象可以解析html/xml得到一个Elementetree对象html_obj = etree.HTML(html)link_list = html_obj.xpath("//a[@class='imgclasstag']/img/@src")for link in link_list:# 将链接切割后再拼接成字符串,作为图片命名li2 = link.split('/')li3 = ''.join(li2)data = self.send_request(link)self.write_image(data, li3)def write_image(self, data, filename):print "[INFO]: 正在保存" + filenamewith open("./Images/" + filename, "wb") as f:f.write(data)def start_work(self):for page in range(self.begin_page, self.end_page + 1):ti = int(time.time()*1000)keyword = {"pn" : page,"ti":ti}# 传递一个字典格式数据,转换成的参数形式kw_str = urllib.urlencode(keyword)    full_url = self.base_url + "/?page=" + kw_str# 单任务html = self.send_request(full_url)self.load_page(html)if __name__ == "__main__":begin_page = raw_input("爬取的起始页:")end_page = raw_input("爬取的结束页:")lofter = LofterSpider()lofter.start_work()

本例只是一个对于基础入门爬虫的初学者练习常用库,可以将单任务改成多线程(threading),协程(gevent)提高爬取速度,使用爬虫框架scrapy就不需要考虑这些问题。所以框架是程序员提高效率节省时间的好东西,毕竟原生的东西什么都要自己写。爬虫是一个很有意思的东西,并不是只能爬个黄图,荡个数据这么简单,要学习的还有很多。

本文原创,转载说明出处!

爬虫网易LOFTER图片(适用于类似网页,如百度贴吧 )相关推荐

  1. lofter 爬虫_Python网络爬虫1 - 爬取网易LOFTER图片

    LOFTER是网易出品的优质轻博客,灵感源于国外的tumblr,但比之更加文艺,更加本地化.本人非常喜欢LOFTER的UI设计,以及其中的优质用户和内容,似乎网易并不擅长推广,所以受众并不广泛.这都是 ...

  2. 适合Python新手的爬虫练习:网易LOFTER图片爬虫(二)

    文章目录 前言 分析 网页分析 总结 前言 上回我们通过分析实现了网易LOFTER图片的爬取,当时我们通过手动配置博主的三级域名实现爬虫.手动配置相对繁琐,为了解决这一问题,我们将进行版本升级. 在读 ...

  3. 适合Python新手的爬虫练习:网易LOFTER图片爬虫(一)

    目录 前言 1. 网页分析 1.1 HTML分析 1.2 DWR分析 1.3 数据整合 2. 采集图片URL 3. 部分代码分享 总结 前言 大学毕业到现在已经快一年了,这一年时间里,我在家里待了半年 ...

  4. Python 爬虫 之 爬虫的一些基本知识和基本操作(爬取视频、图片、获取网页源码等)整理

    Python 爬虫 之 爬虫的一些基本知识和基本操作(爬取视频.图片.获取网页源码等)整理 目录

  5. 【期末课设】python爬虫基础与可视化,使用python语言以及支持python语言的第三方技术实现爬虫功能,定向爬取网页的图片数据,并且实现批量自动命名分类下载。

    1.大作业的内容 本要求使用python语言以及支持python语言的第三方技术实现爬虫功能,定向爬取网页的图片数据,并且实现批量自动命名分类下载. 2.案例需求 要求采用虚拟浏览器等动态爬虫技术,完 ...

  6. 仿网易LOFTER视差滚动列表

    原博客链接 最初看到网易LOFTER的首页的视差滚动效果, 觉得很漂亮, 想要模仿一下 在写代码之前我先百度了一下, 看有没有人已经完成了类似的这种效果, 一看果然有.然后我就把他们的代码clone了 ...

  7. python初学者爬虫教程(二)动态网页抓取

    python爬虫教程(二)动态网页抓取 解析真实地址抓取 通过selenium 模拟浏览器抓取 selenium 安装与测试 selenium爬取一条评论 selenium获取文章的所有评论 sele ...

  8. python爬虫入门教程(三):淘女郎爬虫 ( 接口解析 | 图片下载 )

    2019/10/28更新 网站已改版,代码已失效(其实早就失效了,但我懒得改...)此博文仅供做思路上的参考 代码使用python2编写,因已失效,就未改写成python3 爬虫入门系列教程: pyt ...

  9. Python爬虫 | Python爬虫获取女友图片

    Python爬虫 | Python爬虫获取女友图片 前言 程序说明 二次元女友获取程序 观察网页结构 页面解析 创建图片保存路径 图片下载 格式转换 爬取结果展示 完整程序 前言 (又到了常见的无中生 ...

最新文章

  1. Response.Redirect 打开新窗口的两种方法
  2. 真格量化——50etf与期权对冲策略
  3. UE4使用自定义字体
  4. 视频的播放的用例设计点
  5. JPA Example查询
  6. ··· Socks Online - 在内部网也能使用QQ ···
  7. 服务器搬迁方案_机房搬迁方案
  8. 360安全卫士安装不了此程序被组策略阻止
  9. Scratch 游戏项目学习法 —— 接苹果(十)接住苹果
  10. 求123456789=x成立个数
  11. 基于STM32设计的UNO卡牌游戏(双人、多人对战)
  12. 安卓的个性化彩色二维码的完美实现
  13. html a href 文件下载 IE直接打开 内容乱码
  14. 联想笔记本linux不能启动无线网卡解决方法
  15. 功能测试,什么是功能测试?什么是黑盒测试?一遍文章让你彻底搞懂功能测试
  16. web页面-电子签名
  17. 黏贴图片到word文档图片显示不全,只显示一行(保姆级图文)
  18. javascript操作数组的方法大全
  19. 为什么说裁员18000只是微软计划的一部分
  20. 前端如何实现黑夜模式

热门文章

  1. ShareREC for iOS录屏原理解析
  2. mysql硬盘最长活动时间100%_win10磁盘活动时间100%,小编告诉你解决方法
  3. GitHub标星5.6K,2020腾讯又一力作开源的Android UI框架——QMUI Android
  4. 计算思维(Computational Thinking)
  5. Sqlserver 中的Iif语句
  6. 宣传和灌输诚信国家理念-乌隆他尼皇家大学
  7. JavaGUI:多功能计算器(四)--Swing实现双语悬停提示(源码升级说明)
  8. 战舰少女r服务器维修,战舰少女r修理时间怎么计算?舰船受损维修时间公式分析[多图]...
  9. 会员测试环境治理之路
  10. 关于文案排版的一些基本技巧