鱼C论坛

 找回密码
 立即注册
查看: 2432|回复: 6

056的爬去妹子图程序

[复制链接]
发表于 2017-2-14 16:05:26 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 boat_1987 于 2017-2-14 16:11 编辑

我写了和小甲鱼老师一样的程序,一直报错 HTTP Error 403: Forbidden。这是必须要用代理才行吗?

  1. import urllib.request
  2. import os
  3. import random

  4. def url_open(url):
  5.     req=urllib.request.Request(url)
  6.     req.add_header('User-Agent','Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36')

  7.     '''
  8.     proxies=['111.121.210.159:9999','182.202.115.145:9999','60.214.241.31:9999','39.170.245.115:8123']
  9.     proxy=random.choice(proxies)

  10.     proxy_support=urllib.request.ProxyHandler({'http':proxy})
  11.     opener=urllib.request.build_opener(proxy_support)
  12.     urllib.request.install_opener(opener)
  13.     '''
  14.     response=urllib.request.urlopen(url)
  15.     html=response.read()

  16.     return html
  17. def get_page(url):#获取首页中隐藏的页码
  18.     #首先打开网页,并做一定的隐藏(修改add_header)
  19.     html=url_open(url).decode('utf-8')
  20.     #然后在读取的html中查找到所需的页码
  21.     a=html.find('current-comment-page')+23#c的编号为0,第23个编号为审查元素中的页码的第一个数字
  22.     b=html.find(']',a)
  23.     print(html[a:b])
  24.     return html[a:b]
  25. def find_imgs(url):#获取页面中图片的地址
  26.     html=url_open(url).decode('utf-8')
  27.     img_addrs=[]

  28.     a=html.find('img src=')
  29.     while a!=-1:
  30.         b=html.find('.jpg',a,a+255)
  31.         if b!=-1:#b=-1表示没有find到
  32.             img_addrs.append('http:'+html[a+9:b+4])
  33.             print('http:'+html[a+9:b+4])
  34.         else:
  35.             b=a+9
  36.         a=html.find('img src=',b)
  37.     return img_addrs

  38. def save_imgs(floder,img_addrs):#将图片保存在文件夹
  39.     for each in img_addrs:
  40.         print(each)
  41.         filename=each.split('/')[-1]
  42.         with open(filename,'wb') as f:
  43.             img=url_open(each)#打开图片的链接
  44.             f.write(img)

  45. def download_mm(floder='OOXX',pages=5):
  46.      os.mkdir(floder)
  47.      os.chdir(floder)

  48.      url='http://jandan.net/ooxx/'
  49.      page_num=int(get_page(url))#获取首页中隐藏的页码

  50.      for i in range(page_num):
  51.          page_num-=i
  52.          page_url=url+'page-'+str(page_num)#页面的网址
  53.          img_addrs=find_imgs(page_url)#获取页面中图片的地址
  54.          save_imgs(floder,img_addrs)#将图片保存在文件夹

  55. if __name__=='__main__':
  56.     download_mm()
复制代码


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

使用道具 举报

 楼主| 发表于 2017-2-14 16:11:40 | 显示全部楼层
添加了代理报错这个玩意:好难受呀。。。
urllib.error.URLError: <urlopen error [WinError 10060] 由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败。>
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-2-15 20:59:58 | 显示全部楼层
403 就是被服务器 ban 了
如果手动用浏览器可以访问到图片的话, 尝试着多模拟一些浏览器的环境吧 (包括但不限于 UA, Cookie, Referer..........)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2018-3-3 10:10:37 | 显示全部楼层

   b=html.find('.jpg',a,a+255)为啥我的B等于-1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-20 21:54:29 | 显示全部楼层
我觉得 HTTP Error 403: Forbidden  意思是被禁了,小甲鱼代码有问题  response=urllib.request.urlopen(url)   里面不应该是url,而应该是req ,不然前面你那User-Agent岂不是白写了,另外你就是写对了 现在也爬不了了 因为煎蛋网改了反扒机制
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-21 23:25:22 | 显示全部楼层
yuzhouyichen 发表于 2018-4-20 21:54
我觉得 HTTP Error 403: Forbidden  意思是被禁了,小甲鱼代码有问题  response=urllib.request.urlopen(ur ...
  1. import os
  2. import urllib2

  3. def url_open(url):
  4.         request=urllib2.Request(url)
  5.         request.add_header('User-Agent','Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36')
  6.         response=urllib2.urlopen(request)
  7.         html=response.read()
  8.         return html

  9. def find_image(url):
  10.         html=url_open(url).decode('utf-8')
  11.         image_address=[]

  12.         a=html.find('img src=')
  13.         while a!=-1:
  14.                 b=html.find('.jpg',a,a+255)
  15.                 if b != -1:
  16.                         image_address.append(html[a+9:b+4])
  17.                 else:
  18.                         b=a+9

  19.                 a=html.find('img src=',b)

  20.         for each in image_address:
  21.                 print each

  22. find_image('http://jandan.net/ooxx/page-87#comments')
复制代码


这是煎蛋网上某张妹子图的地址:
<img src="http://wx3.sinaimg.cn/mw600/0076BSS5ly1fqjjkv6w6rj30p00go0u3.jpg" style="max-width: 480px; max-height: 750px;">

代码运行成功,却什么也没有打印出来,只显示[Finished in 0.2s]。请问是因为反爬机制吗?是不是可以理解成煎蛋网把这些图片地址加密了?所以图片地址看上去是html[a+9:b+4],但实际不是。但是即便如此,        for each in image_address: print each 也应该输出点什么,即便不是图片地址。 求解答~~~~~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-5-8 16:57:44 | 显示全部楼层
teribsandy 发表于 2018-4-21 23:25
这是煎蛋网上某张妹子图的地址:

python2版本?或许因为什么都没爬到,列表里为空的原因吧,你试试list1 = []  for i in list1: print i  会不会出现Finished in 0.2s。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-13 00:16

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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