SlideShare uma empresa Scribd logo
1 de 11
Baixar para ler offline
Python 网络抓取小试
    -- 抓取人人网美女相册




           @greatghoul 2011-04-09
涉及的工具及技术
工具                              技术
●   Firefox                     ●   Data Fetching
          –   Firebug                    –   urllib, urllib2,cookielib
●   Chrome                      ●   Data Parsing
          –   Developer Tools            –   re, lxml, minidom,json
●   IE6-IE8                     ●   Data Encode
          –   HttpWatch                  –   Codecs
●   IE9                         ●   Crawling Framework
          –   Developer Tools            –   Scrapy
柿子要找软的捏
●   为什么选择人人网?
      –   有我们需要的资源-海量的美女
      –   防抓的措施基本没有,容易下手
      –   网页源码组织良好,易于解析
●   为什么选择 Python ?
      –   因为简单
      –   因为喜欢
分析步骤
●   是什么:指定相册的所有图片原图
●   在哪里:相册页面及 URL 模式
      –   是否需要登陆?
      –   是否会分页?
      –   如何发页?
●   怎么取:
      –   HTML ?
      –   XML ?
      –   JSON ?
相册页面分析
http://photo.renren.com/photo/223518589/album-222062006?curpage=0
Http://~/photo/<UserID>/album-<AlbumID>?curpage=<Page>



●   页面内容需要登陆才能访问
●   <Page> 为由 0 开始, 0 代表第 1 页
●   当 <page> 指定为超过页面范围的值时,页面并不会报错,而
    是图片列表为空。
登陆分析(使用工具)
●   登录地址: http://www.renren.com/PLogin.do
●   登录方式: POST
●   表单数据:
       –   email: 帐户名
       –   password: 密码
       –   autoLogin: true
       –   origURL:http://www.renren.com/home
       –   domain:renren.com
●   Header ?暂时没有
模拟登陆
cookie = cookielib.CookieJar()
Opener = urllib2.build_opener(
    urllib2.HTTPCookieProcessor(cookie))
urllib2.install_opener(opener)
data = (
    ('email', username),
    ('password',password),
    ('origURL',"http://www.renren.com/Home.do"),
    ('domain',"renren.com")
)
response = urllib2.urlopen(
    'http://www.renren.com/PLogin.do',  
    urllib.urlencode(data))
取得大图页面列表
取得页面源码

html = urllib2.urlopen(url).read()
相册图片列表代码片断

<div id="albumThumbMode" ...> 
<ul><li><a href="http://~/photo­4155919539" class="img"> 
<img ... /></a></span></li>...
</ul></div>
使用正则获取列表

re.findall(r'<a href="(.*)".* class="img">', content)
使用 lxml 获取列表

doc = html.document_fromstring(content)
doc.xpath('//div[@id="albumThumbMode"]//li//a[@class="img
"]//@href')
取得图片地址并下载
使用最省力的方法

http://~/photo/224759290/photo­2665858586/ajax
JSON 片断

{"photo":{"large":"http://~/p_large_***.jpg"}}

解析 JSON ,获取大图地址

photo = json.loads(self.do_post(url + '/ajax'))
photo_url = photo.get('photo').get('large')
filename = re.split('/', photo_url)[­1]
下载大图

f = open(os.path.join(album_dir, filename), 'wb')
f.write(self.session.open(photo_url).read())
f.close()
总结
●   别瞎折腾,走近道
     –   使用 API
     –   使用框架 Scrapy
     –   采用更简单的数据格式
●   注意编码一致
●   不要作恶
●   保持快乐
仅仅为了抓取 ?
你还可以 ...
●   制作照片拼贴!
●   定时更换壁纸!
●   自动备份相册!
●   批量贴图代码!
●   相册更新邮件通知!
●   。。。

Mais conteúdo relacionado

Destaque

Contadino Design - Work in progress
Contadino Design - Work in progressContadino Design - Work in progress
Contadino Design - Work in progressNaba Design
 
Modello - Alexander Cintelli
Modello - Alexander CintelliModello - Alexander Cintelli
Modello - Alexander CintelliNaba Design
 
Contadino Design - Gruppo 5
Contadino Design - Gruppo 5Contadino Design - Gruppo 5
Contadino Design - Gruppo 5Naba Design
 
Modello - Camilla Casiccia
Modello - Camilla CasicciaModello - Camilla Casiccia
Modello - Camilla CasicciaNaba Design
 
Modello - Riccardo Arzuffi
Modello - Riccardo ArzuffiModello - Riccardo Arzuffi
Modello - Riccardo ArzuffiNaba Design
 
Modello - Giulia Boeri
Modello - Giulia BoeriModello - Giulia Boeri
Modello - Giulia BoeriNaba Design
 
Modello - Lavinia Baroni
Modello - Lavinia BaroniModello - Lavinia Baroni
Modello - Lavinia BaroniNaba Design
 
Contadino Design - Gruppo 7
Contadino Design - Gruppo 7Contadino Design - Gruppo 7
Contadino Design - Gruppo 7Naba Design
 
Modello - Riccardo Buttazzo
Modello - Riccardo ButtazzoModello - Riccardo Buttazzo
Modello - Riccardo ButtazzoNaba Design
 
Contadino Design - Gruppo 8
Contadino Design - Gruppo 8Contadino Design - Gruppo 8
Contadino Design - Gruppo 8Naba Design
 
Fake Food - Students
Fake Food - StudentsFake Food - Students
Fake Food - StudentsNaba Design
 
20130604 Prototype Driven Design@Computex 2013 智慧手持裝置論壇 I 加拿大人機介面技術發展與經驗分享
20130604 Prototype Driven Design@Computex 2013 智慧手持裝置論壇 I  加拿大人機介面技術發展與經驗分享20130604 Prototype Driven Design@Computex 2013 智慧手持裝置論壇 I  加拿大人機介面技術發展與經驗分享
20130604 Prototype Driven Design@Computex 2013 智慧手持裝置論壇 I 加拿大人機介面技術發展與經驗分享Justin Lee
 
2013/05/19 Sketching with code@JSDC2013
2013/05/19 Sketching with code@JSDC20132013/05/19 Sketching with code@JSDC2013
2013/05/19 Sketching with code@JSDC2013Justin Lee
 
Chrome Extension Develop Starts
Chrome Extension Develop StartsChrome Extension Develop Starts
Chrome Extension Develop Startstaobao.com
 

Destaque (14)

Contadino Design - Work in progress
Contadino Design - Work in progressContadino Design - Work in progress
Contadino Design - Work in progress
 
Modello - Alexander Cintelli
Modello - Alexander CintelliModello - Alexander Cintelli
Modello - Alexander Cintelli
 
Contadino Design - Gruppo 5
Contadino Design - Gruppo 5Contadino Design - Gruppo 5
Contadino Design - Gruppo 5
 
Modello - Camilla Casiccia
Modello - Camilla CasicciaModello - Camilla Casiccia
Modello - Camilla Casiccia
 
Modello - Riccardo Arzuffi
Modello - Riccardo ArzuffiModello - Riccardo Arzuffi
Modello - Riccardo Arzuffi
 
Modello - Giulia Boeri
Modello - Giulia BoeriModello - Giulia Boeri
Modello - Giulia Boeri
 
Modello - Lavinia Baroni
Modello - Lavinia BaroniModello - Lavinia Baroni
Modello - Lavinia Baroni
 
Contadino Design - Gruppo 7
Contadino Design - Gruppo 7Contadino Design - Gruppo 7
Contadino Design - Gruppo 7
 
Modello - Riccardo Buttazzo
Modello - Riccardo ButtazzoModello - Riccardo Buttazzo
Modello - Riccardo Buttazzo
 
Contadino Design - Gruppo 8
Contadino Design - Gruppo 8Contadino Design - Gruppo 8
Contadino Design - Gruppo 8
 
Fake Food - Students
Fake Food - StudentsFake Food - Students
Fake Food - Students
 
20130604 Prototype Driven Design@Computex 2013 智慧手持裝置論壇 I 加拿大人機介面技術發展與經驗分享
20130604 Prototype Driven Design@Computex 2013 智慧手持裝置論壇 I  加拿大人機介面技術發展與經驗分享20130604 Prototype Driven Design@Computex 2013 智慧手持裝置論壇 I  加拿大人機介面技術發展與經驗分享
20130604 Prototype Driven Design@Computex 2013 智慧手持裝置論壇 I 加拿大人機介面技術發展與經驗分享
 
2013/05/19 Sketching with code@JSDC2013
2013/05/19 Sketching with code@JSDC20132013/05/19 Sketching with code@JSDC2013
2013/05/19 Sketching with code@JSDC2013
 
Chrome Extension Develop Starts
Chrome Extension Develop StartsChrome Extension Develop Starts
Chrome Extension Develop Starts
 

Semelhante a Python网络抓取小试

20121115 Slides
20121115 Slides20121115 Slides
20121115 SlidesTonyq Wang
 
HPX台南讀書會-Axure RP基礎課程
HPX台南讀書會-Axure RP基礎課程HPX台南讀書會-Axure RP基礎課程
HPX台南讀書會-Axure RP基礎課程Souyi Yang
 
[DCTPE2011] Drupal 6 的 CCK/Views運用--林振昇
[DCTPE2011] Drupal 6 的 CCK/Views運用--林振昇[DCTPE2011] Drupal 6 的 CCK/Views運用--林振昇
[DCTPE2011] Drupal 6 的 CCK/Views運用--林振昇Drupal Taiwan
 
Adorable python
Adorable pythonAdorable python
Adorable pythonRhythm Sun
 
Django入门
Django入门Django入门
Django入门oikomi
 
Python和web开发
Python和web开发Python和web开发
Python和web开发moonbingbing
 
100902 wm4wps-py-webdev
100902 wm4wps-py-webdev100902 wm4wps-py-webdev
100902 wm4wps-py-webdevZoom Quiet
 
[Talk] 2013 06-02-hadoop整合應用-crawlzilla@hadoop q2
[Talk] 2013 06-02-hadoop整合應用-crawlzilla@hadoop q2[Talk] 2013 06-02-hadoop整合應用-crawlzilla@hadoop q2
[Talk] 2013 06-02-hadoop整合應用-crawlzilla@hadoop q2Yang FaFa
 
如何,高效利用搜索引擎+构建网络工具箱
如何,高效利用搜索引擎+构建网络工具箱如何,高效利用搜索引擎+构建网络工具箱
如何,高效利用搜索引擎+构建网络工具箱84zhu
 
20130325 mldm monday spide r
20130325 mldm monday spide r20130325 mldm monday spide r
20130325 mldm monday spide rChia-Chi Chang
 
[DCTPE2011] 11) Drupal 是好的生財工具嗎? 1. 網站標案經驗分享 x 2
[DCTPE2011] 11) Drupal 是好的生財工具嗎?  1. 網站標案經驗分享 x 2[DCTPE2011] 11) Drupal 是好的生財工具嗎?  1. 網站標案經驗分享 x 2
[DCTPE2011] 11) Drupal 是好的生財工具嗎? 1. 網站標案經驗分享 x 2Drupal Taiwan
 
從雛形到設計-了解您的使用者在想什麼
從雛形到設計-了解您的使用者在想什麼從雛形到設計-了解您的使用者在想什麼
從雛形到設計-了解您的使用者在想什麼Souyi Yang
 
高雄和春資工系-Axure RP基礎課程
高雄和春資工系-Axure RP基礎課程高雄和春資工系-Axure RP基礎課程
高雄和春資工系-Axure RP基礎課程Souyi Yang
 
Funliday 新創生活甘苦談
Funliday 新創生活甘苦談Funliday 新創生活甘苦談
Funliday 新創生活甘苦談Mu Chun Wang
 
KSDG Python and MongoDB for web
KSDG Python and MongoDB for webKSDG Python and MongoDB for web
KSDG Python and MongoDB for webToomore
 
构建网络工具箱
构建网络工具箱构建网络工具箱
构建网络工具箱Lv Jian
 
資訊創意課程 - Create A Personal Website 1
資訊創意課程 - Create A Personal Website 1資訊創意課程 - Create A Personal Website 1
資訊創意課程 - Create A Personal Website 1均民 戴
 
Grpc go-in-php
Grpc go-in-phpGrpc go-in-php
Grpc go-in-php光照 刘
 

Semelhante a Python网络抓取小试 (20)

20121115 Slides
20121115 Slides20121115 Slides
20121115 Slides
 
HPX台南讀書會-Axure RP基礎課程
HPX台南讀書會-Axure RP基礎課程HPX台南讀書會-Axure RP基礎課程
HPX台南讀書會-Axure RP基礎課程
 
[DCTPE2011] Drupal 6 的 CCK/Views運用--林振昇
[DCTPE2011] Drupal 6 的 CCK/Views運用--林振昇[DCTPE2011] Drupal 6 的 CCK/Views運用--林振昇
[DCTPE2011] Drupal 6 的 CCK/Views運用--林振昇
 
Adorable python
Adorable pythonAdorable python
Adorable python
 
Django入门
Django入门Django入门
Django入门
 
Python和web开发
Python和web开发Python和web开发
Python和web开发
 
100902 wm4wps-py-webdev
100902 wm4wps-py-webdev100902 wm4wps-py-webdev
100902 wm4wps-py-webdev
 
[Talk] 2013 06-02-hadoop整合應用-crawlzilla@hadoop q2
[Talk] 2013 06-02-hadoop整合應用-crawlzilla@hadoop q2[Talk] 2013 06-02-hadoop整合應用-crawlzilla@hadoop q2
[Talk] 2013 06-02-hadoop整合應用-crawlzilla@hadoop q2
 
Django step0
Django step0Django step0
Django step0
 
如何,高效利用搜索引擎+构建网络工具箱
如何,高效利用搜索引擎+构建网络工具箱如何,高效利用搜索引擎+构建网络工具箱
如何,高效利用搜索引擎+构建网络工具箱
 
20130325 mldm monday spide r
20130325 mldm monday spide r20130325 mldm monday spide r
20130325 mldm monday spide r
 
[DCTPE2011] 11) Drupal 是好的生財工具嗎? 1. 網站標案經驗分享 x 2
[DCTPE2011] 11) Drupal 是好的生財工具嗎?  1. 網站標案經驗分享 x 2[DCTPE2011] 11) Drupal 是好的生財工具嗎?  1. 網站標案經驗分享 x 2
[DCTPE2011] 11) Drupal 是好的生財工具嗎? 1. 網站標案經驗分享 x 2
 
從雛形到設計-了解您的使用者在想什麼
從雛形到設計-了解您的使用者在想什麼從雛形到設計-了解您的使用者在想什麼
從雛形到設計-了解您的使用者在想什麼
 
高雄和春資工系-Axure RP基礎課程
高雄和春資工系-Axure RP基礎課程高雄和春資工系-Axure RP基礎課程
高雄和春資工系-Axure RP基礎課程
 
Funliday 新創生活甘苦談
Funliday 新創生活甘苦談Funliday 新創生活甘苦談
Funliday 新創生活甘苦談
 
KSDG Python and MongoDB for web
KSDG Python and MongoDB for webKSDG Python and MongoDB for web
KSDG Python and MongoDB for web
 
构建网络工具箱
构建网络工具箱构建网络工具箱
构建网络工具箱
 
資訊創意課程 - Create A Personal Website 1
資訊創意課程 - Create A Personal Website 1資訊創意課程 - Create A Personal Website 1
資訊創意課程 - Create A Personal Website 1
 
Grpc go-in-php
Grpc go-in-phpGrpc go-in-php
Grpc go-in-php
 
Seo
SeoSeo
Seo
 

Python网络抓取小试