鱼C论坛

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

056的爬去妹子图程序

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

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

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

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

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

def url_open(url):
    req=urllib.request.Request(url)
    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')

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

    proxy_support=urllib.request.ProxyHandler({'http':proxy})
    opener=urllib.request.build_opener(proxy_support)
    urllib.request.install_opener(opener)
    '''
    response=urllib.request.urlopen(url)
    html=response.read()

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

    a=html.find('img src=')
    while a!=-1:
        b=html.find('.jpg',a,a+255)
        if b!=-1:#b=-1表示没有find到
            img_addrs.append('http:'+html[a+9:b+4])
            print('http:'+html[a+9:b+4])
        else:
            b=a+9
        a=html.find('img src=',b)
    return img_addrs

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

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

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

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

if __name__=='__main__':
    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 ...
import os
import urllib2

def url_open(url):
        request=urllib2.Request(url)
        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')
        response=urllib2.urlopen(request)
        html=response.read()
        return html

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

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

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

        for each in image_address:
                print each

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, 2025-2-9 07:25

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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