爬虫网易LOFTER图片(适用于类似网页,如百度贴吧 )
介绍:
网易有一个图片社交网站叫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图片(适用于类似网页,如百度贴吧 )相关推荐
- lofter 爬虫_Python网络爬虫1 - 爬取网易LOFTER图片
LOFTER是网易出品的优质轻博客,灵感源于国外的tumblr,但比之更加文艺,更加本地化.本人非常喜欢LOFTER的UI设计,以及其中的优质用户和内容,似乎网易并不擅长推广,所以受众并不广泛.这都是 ...
- 适合Python新手的爬虫练习:网易LOFTER图片爬虫(二)
文章目录 前言 分析 网页分析 总结 前言 上回我们通过分析实现了网易LOFTER图片的爬取,当时我们通过手动配置博主的三级域名实现爬虫.手动配置相对繁琐,为了解决这一问题,我们将进行版本升级. 在读 ...
- 适合Python新手的爬虫练习:网易LOFTER图片爬虫(一)
目录 前言 1. 网页分析 1.1 HTML分析 1.2 DWR分析 1.3 数据整合 2. 采集图片URL 3. 部分代码分享 总结 前言 大学毕业到现在已经快一年了,这一年时间里,我在家里待了半年 ...
- Python 爬虫 之 爬虫的一些基本知识和基本操作(爬取视频、图片、获取网页源码等)整理
Python 爬虫 之 爬虫的一些基本知识和基本操作(爬取视频.图片.获取网页源码等)整理 目录
- 【期末课设】python爬虫基础与可视化,使用python语言以及支持python语言的第三方技术实现爬虫功能,定向爬取网页的图片数据,并且实现批量自动命名分类下载。
1.大作业的内容 本要求使用python语言以及支持python语言的第三方技术实现爬虫功能,定向爬取网页的图片数据,并且实现批量自动命名分类下载. 2.案例需求 要求采用虚拟浏览器等动态爬虫技术,完 ...
- 仿网易LOFTER视差滚动列表
原博客链接 最初看到网易LOFTER的首页的视差滚动效果, 觉得很漂亮, 想要模仿一下 在写代码之前我先百度了一下, 看有没有人已经完成了类似的这种效果, 一看果然有.然后我就把他们的代码clone了 ...
- python初学者爬虫教程(二)动态网页抓取
python爬虫教程(二)动态网页抓取 解析真实地址抓取 通过selenium 模拟浏览器抓取 selenium 安装与测试 selenium爬取一条评论 selenium获取文章的所有评论 sele ...
- python爬虫入门教程(三):淘女郎爬虫 ( 接口解析 | 图片下载 )
2019/10/28更新 网站已改版,代码已失效(其实早就失效了,但我懒得改...)此博文仅供做思路上的参考 代码使用python2编写,因已失效,就未改写成python3 爬虫入门系列教程: pyt ...
- Python爬虫 | Python爬虫获取女友图片
Python爬虫 | Python爬虫获取女友图片 前言 程序说明 二次元女友获取程序 观察网页结构 页面解析 创建图片保存路径 图片下载 格式转换 爬取结果展示 完整程序 前言 (又到了常见的无中生 ...
最新文章
- Response.Redirect 打开新窗口的两种方法
- 真格量化——50etf与期权对冲策略
- UE4使用自定义字体
- 视频的播放的用例设计点
- JPA Example查询
- ··· Socks Online - 在内部网也能使用QQ ···
- 服务器搬迁方案_机房搬迁方案
- 360安全卫士安装不了此程序被组策略阻止
- Scratch 游戏项目学习法 —— 接苹果(十)接住苹果
- 求123456789=x成立个数
- 基于STM32设计的UNO卡牌游戏(双人、多人对战)
- 安卓的个性化彩色二维码的完美实现
- html a href 文件下载 IE直接打开 内容乱码
- 联想笔记本linux不能启动无线网卡解决方法
- 功能测试,什么是功能测试?什么是黑盒测试?一遍文章让你彻底搞懂功能测试
- web页面-电子签名
- 黏贴图片到word文档图片显示不全,只显示一行(保姆级图文)
- javascript操作数组的方法大全
- 为什么说裁员18000只是微软计划的一部分
- 前端如何实现黑夜模式
热门文章
- ShareREC for iOS录屏原理解析
- mysql硬盘最长活动时间100%_win10磁盘活动时间100%,小编告诉你解决方法
- GitHub标星5.6K,2020腾讯又一力作开源的Android UI框架——QMUI Android
- 计算思维(Computational Thinking)
- Sqlserver 中的Iif语句
- 宣传和灌输诚信国家理念-乌隆他尼皇家大学
- JavaGUI:多功能计算器(四)--Swing实现双语悬停提示(源码升级说明)
- 战舰少女r服务器维修,战舰少女r修理时间怎么计算?舰船受损维修时间公式分析[多图]...
- 会员测试环境治理之路
- 关于文案排版的一些基本技巧