鱼C论坛

 找回密码
 立即注册
查看: 20485|回复: 257

[作品展示] 我也来爬OOXX【新科技】

  [复制链接]
发表于 2016-2-18 11:33:18 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 竹林小溪 于 2016-2-18 11:39 编辑

最近看了一些关于python的教程,觉得爬虫挺好玩的(可以爬妹纸图。。。哈哈哈。。。

@小甲鱼 老师在 《论一只爬虫的自我修养4:OOXX》 这课里利用python自带的urllib库结合html查找的方式获取图片的url地址,很容易学会也非常方便。

不过我觉得这题还可以有别的解法

①URL请求部分可以利用第三方的requests库代替python的urllib,使得原本五行代码一行就能搞定!

  1. def url_open(url):
  2.     return requests.get(url, headers=head)
复制代码


②匹配字符串或者图片位置的时候,可以利用xpath解决,相对于正则表达式来说,既省时又省力。

  1. def find_imgs(url):
  2.     html_re = url_open(url).content
  3.     xpath_img = '//*[starts-with(@id,"comment-")]/div[1]/div/div[2]/p/img/@src'
  4.     selector = etree.HTML(html_re)
  5.     return selector.xpath(xpath_img)
复制代码


完整代码:

  1. #照着甲鱼的代码修改的
  2. import requests
  3. import os
  4. import time
  5. from lxml import etree

  6. head = {
  7.         ......
  8. }

  9. def url_open(url):
  10.     return requests.get(url, headers=head)

  11. def get_page(url):
  12.     html_re = url_open(url).content
  13.     xpath_str = '//*[@id="comments"]/div[2]/div/span/text()'
  14.     selector = etree.HTML(html_re)
  15.     str = selector.xpath(xpath_str)[0]
  16.     return str[1:5]

  17. def find_imgs(url):
  18.     html_re = url_open(url).content
  19.     xpath_img = '//*[starts-with(@id,"comment-")]/div[1]/div/div[2]/p/img/@src'
  20.     selector = etree.HTML(html_re)
  21.     return selector.xpath(xpath_img)

  22. def save_imgs(folder, urls):
  23.     for each in urls:
  24.         filename = each.split('/')[-1]
  25.         with open(filename, 'wb') as f:
  26.             img = url_open(each).content
  27.             f.write(img)

  28. def main(folder, page):
  29.     os.mkdir(folder)
  30.     os.chdir(folder)

  31.     url = 'http://jandan.net/ooxx/'
  32.     page_num = int(get_page(url))

  33.     for i in range(page):
  34.         page_num -= i
  35.         page_url = url + 'page-' + str(page_num) + '#comments'
  36.         img_urls = find_imgs(page_url)
  37.         save_imgs(folder, img_urls)
  38.         time.sleep(0.1)

  39. if __name__ == '__main__':
  40.     main(folder='OOXX', page=10)
复制代码


结果图1.png
结果图2.png
这个OOXX网站还有一个很蛋疼的问题,就是它会自动检测爬虫,那么如何解决这个问题呢
游客,如果您要查看本帖隐藏内容请回复


评分

参与人数 7荣誉 +23 鱼币 +31 贡献 +14 收起 理由
新手·ing + 1 + 1 + 5 支持楼主!
不二如是 + 5 + 5 + 3
Angel丶L + 1 + 1 + 1 怎么都感觉你是千年实习
小甲鱼 + 8 + 5 热爱鱼C^_^
冬雪雪冬 + 10 + 10 热爱鱼C^_^
qingchen + 5 + 5 支持楼主!
zooo + 1 + 1 支持楼主!

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2016-2-18 11:40:34 | 显示全部楼层
一楼自己占哦
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-2-18 11:43:45 | 显示全部楼层
给力
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2016-2-18 12:23:16 | 显示全部楼层

感谢支持哦~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-2-18 14:27:08 | 显示全部楼层
我也想知道有人分析了这个OOXX的反爬机制了嘛?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-2-18 18:55:58 | 显示全部楼层
高~~~~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-2-18 21:24:18 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-2-19 08:58:50 | 显示全部楼层
支持楼主!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-2-19 09:29:24 | 显示全部楼层
确实不错~
想问一下xpath也是第三方库么,具体怎么用呀,尤其是写正则表达式那块?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-2-19 09:41:51 | 显示全部楼层
shuofxz 发表于 2016-2-19 09:29
确实不错~
想问一下xpath也是第三方库么,具体怎么用呀,尤其是写正则表达式那块?

感谢支持~
是的,xpath是第三方库。主要用于解决XML数据(元素和属性)的读取。由于HTML与XML的格式相似,都是树状结构的。因此可以使用xpath来对HTML中的元素或属性进行索引。即从树的根出发,一级级分支,直到找到目标,因此不需要使用正则表达式。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-2-19 09:46:57 | 显示全部楼层
竹林小溪 发表于 2016-2-19 09:41
感谢支持~
是的,xpath是第三方库。主要用于解决XML数据(元素和属性)的读取。由于HTML与XML ...

原来是这样
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-2-19 10:22:14 | 显示全部楼层
支持
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-2-19 10:27:53 | 显示全部楼层
6666666
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-2-19 11:36:55 | 显示全部楼层
支持楼主
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-2-19 12:36:37 | 显示全部楼层
楼主的谢谢你的分享。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-2-19 18:56:21 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-2-19 22:03:58 | 显示全部楼层
福利哦!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-2-20 01:39:07 | 显示全部楼层
支持一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-2-20 08:42:22 | 显示全部楼层
我喜欢哈哈!!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-2-20 11:08:01 | 显示全部楼层
哇塞,慢慢学习python,希望有朝一日能和楼主一样,刁刁哒
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-19 18:23

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表