hnysy222 发表于 2020-3-12 21:38:02

小甲鱼 爬虫自我修养XXOO 煎蛋网反爬虫后,处理方法

本帖最后由 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"></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.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
            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)
            img_addrs.append(html)
      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
      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


{:5_91:}

昕颖 发表于 2020-3-30 09:03:17

一直卡这里好久了

昕颖 发表于 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'


不行啊兄弟{:10_269:}
页: [1]
查看完整版本: 小甲鱼 爬虫自我修养XXOO 煎蛋网反爬虫后,处理方法