鱼C论坛

 找回密码
 立即注册
查看: 1765|回复: 2

[技术交流] 小甲鱼 爬虫自我修养XXOO 煎蛋网反爬虫后,处理方法

[复制链接]
发表于 2020-3-12 21:38:02 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 hnysy222 于 2020-3-12 22:01 编辑

小甲鱼xxoo爬虫,,发现煎蛋网web网址和之前不一样了,用老师的代码不可用了,仔细分析后,代码稍作调整,可以实现爬前N页的MM图。
思路:还是先观察,发现第一页网址是“http://jandan.net/ooxx/”,,然后下一页都是以下规律<a title="Older Comments" href="//jandan.net/ooxx/MjAyMDAzMTItMjI4#comments" class="previous-comment-page">下一页</a>
修改的地方:1、用一个字典来存网址,key是页码,value是网址。
2、第一页,查找<span class="current-comment-page">[229]</span> 把229 匹配出来作为key,http://jandan.net/ooxx/是value
判断如果需要爬的页码大于1, 写一个循环,去查找<a title="Older Comments" href="//jandan.net/ooxx/MjAyMDAzMTItMjI4#comments" class="previous-comment-page">下一页</a> 把229-1作为key,匹配//jandan.net/ooxx/MjAyMDAzMTItMjI4#comments作为value, 循环最后把url更新为下一页的网址,再次循环的时候就会去新的网址找下一页。
3、其他代码基本没变。
代码:
import urllib.request
import os
pagedict = { }
def url_open(url):
    req = urllib.request.Request(url)
    req.add_header('Usr-Agent','Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36')
    response = urllib.request.urlopen(url)
    html = response.read()
    return html

def get_page(url,pages=1):
    html = url_open(url).decode('utf-8')

    a = html.find('current-comment-page') + 23  # 加上 23 位偏移就刚到到页码数的第一位数字
    b = html.find(']', a)  # 找到 a 位置之后的第一个方括号所在位置的索引坐标
    num = html[a:b].strip()
    num = int(num)
    pagedict.update({num:url})
    if pages >1:
        for i in range (pages-1):
            html = url_open(url).decode('utf-8')
            a = html.find('Older Comments',0)
            b = html.find('" class', a)
            # print("c===================  ",c)
            page = 'http:' + html[a+22:b]
            print('page======= ',page)
            pagenum = num -1
            # print("pagenum======= ",pagenum)
            pagedict.update({pagenum: page})
            num -=1
            url = page
            print(url)
    print('1111',pagedict)

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:
            print(html[a+9:b+4])
            img_addrs.append(html[a+9:b+4])
        else:
            b = a +9
        a = html.find('img src=', b)  # 在b之后开始,再找img src
    for each in img_addrs:
        print(each)
    return img_addrs
def save_imgs(folder,img_addrs):
    for each in img_addrs:
        filename = each.split('/')[-1]
        print('http:'+ each)
        with open(filename,'wb') as f:
            img = url_open('http:' +each)
            f.write(img)

def download_mm(folder='ooxx',pages=10):
    os.mkdir(folder)
    os.chdir(folder)

    url = 'http://jandan.net/ooxx/'
    get_page(url,pages=10)
    print(pagedict)
    for key in pagedict:
        page_url = pagedict[key]
        print(page_url)
        img_addrs = find_imgs(page_url)
        save_imgs(folder,img_addrs)

if __name__ == '__main__':
    download_mm()



输出结果:

{233: 'http://jandan.net/ooxx/', 232: 'http://jandan.net/ooxx/MjAyMDAzMTItMjMy#comments', 231: 'http://jandan.net/ooxx/MjAyMDAzMTItMjMx#comments', 230: 'http://jandan.net/ooxx/MjAyMDAzMTItMjMw#comments', 229: 'http://jandan.net/ooxx/MjAyMDAzMTItMjI5#comments', 228: 'http://jandan.net/ooxx/MjAyMDAzMTItMjI4#comments', 227: 'http://jandan.net/ooxx/MjAyMDAzMTItMjI3#comments', 226: 'http://jandan.net/ooxx/MjAyMDAzMTItMjI2#comments', 225: 'http://jandan.net/ooxx/MjAyMDAzMTItMjI1#comments', 224: 'http://jandan.net/ooxx/MjAyMDAzMTItMjI0#comments'}
http://jandan.net/ooxx/
//wx1.sinaimg.cn/mw600/0076BSS5ly1gcrfwt1seoj30tm18gwnu.jpg
//wx1.sinaimg.cn/mw600/0076BSS5ly1gcrfwt1seoj30tm18gwnu.jpg
http://wx1.sinaimg.cn/mw600/0076BSS5ly1gcrfwt1seoj30tm18gwnu.jpg
http://jandan.net/ooxx/MjAyMDAzMTItMjMy#comments
//wx3.sinaimg.cn/mw600/0076BSS5ly1gcrfvuervaj30u018ydu2.jpg
//wx2.sinaimg.cn/mw600/0076BSS5ly1gcrfqwoqodj30u011in2s.jpg
//wx3.sinaimg.cn/mw600/0076BSS5ly1gcrfl2owubj30u00u0gnu.jpg
//wx1.sinaimg.cn/mw600/0076BSS5ly1gcrfkh6s97j30u0103acf.jpg
//wx4.sinaimg.cn/mw600/0076BSS5ly1gcrfgfvug4j30u01al7wh.jpg
//wx2.sinaimg.cn/mw600/0076BSS5ly1gcrfewnds0j30zk0nqtbe.jpg
//wx3.sinaimg.cn/mw600/0076BSS5ly1gcrfaqyaidj30u0190n5q.jpg
//wx2.sinaimg.cn/mw600/0076BSS5ly1gcrf94k6qaj30u0190hdt.jpg


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

使用道具 举报

发表于 2020-3-30 09:03:17 | 显示全部楼层
一直卡这里好久了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-30 10:16:56 | 显示全部楼层
Traceback (most recent call last):
  File "C:\Users\昕颖\Desktop\测试.py", line 100, in <module>
    download_mm()
  File "C:\Users\昕颖\Desktop\测试.py", line 75, in download_mm
    get_page(url,pages=10)
TypeError: get_page() got an unexpected keyword argument 'pages'


不行啊  兄弟
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-25 15:20

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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