Python 网络抓取小试    -- 抓取人人网美女相册           @greatghoul 2011-04-09
涉及的工具及技术工具                              技术●   Firefox                     ●   Data Fetching          –   Firebug          ...
柿子要找软的捏●   为什么选择人人网?      –   有我们需要的资源-海量的美女      –   防抓的措施基本没有,容易下手      –   网页源码组织良好,易于解析●   为什么选择 Python ?      –   因为简...
分析步骤●   是什么:指定相册的所有图片原图●   在哪里:相册页面及 URL 模式      –   是否需要登陆?      –   是否会分页?      –   如何发页?●   怎么取:      –   HTML ?      –...
相册页面分析http://photo.renren.com/photo/223518589/album-222062006?curpage=0Http://~/photo/<UserID>/album-<AlbumID>?curpage=<Pa...
登陆分析(使用工具)●   登录地址: http://www.renren.com/PLogin.do●   登录方式: POST●   表单数据:       –   email: 帐户名       –   password: 密码    ...
模拟登陆cookie = cookielib.CookieJar()Opener = urllib2.build_opener(    urllib2.HTTPCookieProcessor(cookie))urllib2.install_op...
取得大图页面列表取得页面源码html = urllib2.urlopen(url).read()相册图片列表代码片断<div id="albumThumbMode" ...> <ul><li><a href="http://~/photo­41...
取得图片地址并下载使用最省力的方法http://~/photo/224759290/photo­2665858586/ajaxJSON 片断{"photo":{"large":"http://~/p_large_***.jpg"}}解析 JSO...
总结●   别瞎折腾,走近道     –   使用 API     –   使用框架 Scrapy     –   采用更简单的数据格式●   注意编码一致●   不要作恶●   保持快乐
仅仅为了抓取 ?你还可以 ...●   制作照片拼贴!●   定时更换壁纸!●   自动备份相册!●   批量贴图代码!●   相册更新邮件通知!●   。。。
Upcoming SlideShare
Loading in …5
×

Python网络抓取小试

2,827 views
2,617 views

Published on

以抓取人人网美女相册为例,讲解简单的网络抓取过程。

Published in: Self Improvement
0 Comments
5 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
2,827
On SlideShare
0
From Embeds
0
Number of Embeds
5
Actions
Shares
0
Downloads
22
Comments
0
Likes
5
Embeds 0
No embeds

No notes for slide

Python网络抓取小试

  1. 1. Python 网络抓取小试 -- 抓取人人网美女相册 @greatghoul 2011-04-09
  2. 2. 涉及的工具及技术工具 技术● 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
  3. 3. 柿子要找软的捏● 为什么选择人人网? – 有我们需要的资源-海量的美女 – 防抓的措施基本没有,容易下手 – 网页源码组织良好,易于解析● 为什么选择 Python ? – 因为简单 – 因为喜欢
  4. 4. 分析步骤● 是什么:指定相册的所有图片原图● 在哪里:相册页面及 URL 模式 – 是否需要登陆? – 是否会分页? – 如何发页?● 怎么取: – HTML ? – XML ? – JSON ?
  5. 5. 相册页面分析http://photo.renren.com/photo/223518589/album-222062006?curpage=0Http://~/photo/<UserID>/album-<AlbumID>?curpage=<Page>● 页面内容需要登陆才能访问● <Page> 为由 0 开始, 0 代表第 1 页● 当 <page> 指定为超过页面范围的值时,页面并不会报错,而 是图片列表为空。
  6. 6. 登陆分析(使用工具)● 登录地址: http://www.renren.com/PLogin.do● 登录方式: POST● 表单数据: – email: 帐户名 – password: 密码 – autoLogin: true – origURL:http://www.renren.com/home – domain:renren.com● Header ?暂时没有
  7. 7. 模拟登陆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))
  8. 8. 取得大图页面列表取得页面源码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)
  9. 9. 取得图片地址并下载使用最省力的方法http://~/photo/224759290/photo­2665858586/ajaxJSON 片断{"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()
  10. 10. 总结● 别瞎折腾,走近道 – 使用 API – 使用框架 Scrapy – 采用更简单的数据格式● 注意编码一致● 不要作恶● 保持快乐
  11. 11. 仅仅为了抓取 ?你还可以 ...● 制作照片拼贴!● 定时更换壁纸!● 自动备份相册!● 批量贴图代码!● 相册更新邮件通知!● 。。。

×