xiaobaitu66888 发表于 2019-10-2 15:04

小白爬取宅男女神网的一点小问题

import urllib.request
import re
import time
import urllib.parse
import os

def open_url(url,headers=None):
    try_c=0
    while try_c<3:
      try:
            if headers==None:
                headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) Ap\
pleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.104 Safari/537.36 Co\
re/1.53.3103.400 QQBrowser/9.6.11372.400'}
                req=urllib.request.Request(url,headers=headers)
   
                page = urllib.request.urlopen(req)
                html = page.read().decode('utf-8')
                try_c=3
      except:
            try_c=try_c+1
            print('重试\n')
   
    return html

def get_url(url):
    try_c=0
    while try_c<3:
      try:
            html = open_url(url)
            urllist = re.findall("<a class='igalleryli_link' href='/g/([^/]+?)/'",html)
            try_c=3
      except:
            try_c=try_c+1
            print('重试\n')
    return urllist
def get_1_url(url):
    try_c=0
    while try_c<3:
      try:
            html = open_url(url)
            urllist = re.findall(r"href='/g/(\d+?)/'",html)
            try_c=3
      except:
            try_c=try_c+1
            print('重试\n')
    return urllist

def get_img(html,headers):
    p = r"<img src='([^']+?)'"
    imglist = re.findall(p,html)
    for each in imglist:
      print(each)
      filename = each.split('/')[-1]
      req=urllib.request.Request(each,headers=headers)
      try_c=0
      while try_c<3:
            try:
                page = urllib.request.urlopen(req,timeout=5)
                html = page.read()#.decode('utf-8')
                with open(filename,'wb') as f:
                  f.write(html)
                  f.close()
                try_c=3
            except:
                try_c=try_c+1
                print('重试\n')

if __name__=='__main__':
    while 1:
      m_name_search=input('输入要搜索的妹子:')
      if m_name_search == '1':
            o_url = 'https://www.nvshens.net/gallery/'
            urllist=get_1_url(o_url)
      else:
            m_search = urllib.parse.quote(m_name_search)
            o_url = 'https://www.nvshens.net/girl/search.aspx?name='+m_search
            o_html = open_url(o_url)
            girl1 = re.findall("href='/girl/([^/]+?)/' target='_blank'>",o_html)
            print(girl1)
            o_url = 'https://www.nvshens.net/girl/'+girl1+'/album/'
            urllist=get_url(o_url)
      print(urllist)
      a_cont=0
      exist_dir_search =os.path.isdir(m_name_search)
      if not exist_dir_search:
            os.mkdir(m_name_search)
      os.chdir(m_name_search)
      download_time = input('输入要下的专辑数:')
      while not download_time.isnumeric():
            download_time = input('请输入数字:')
      download_time = int(download_time)
      download_time_counter = 1#下载的专辑数计数
      for url in urllist:
            url = 'https://www.nvshens.com/g/'+url+'/'
            print(url)
            html_new_dir=open_url(url)
            new_dir_name = re.findall('<title>(.+?)</title>',html_new_dir)
            dir_exist = os.path.isdir(new_dir_name)
            if dir_exist:
                continue
            os.mkdir(new_dir_name)
            os.chdir(new_dir_name)
            new_href='10'
            for i in range(1,100):
                url_new = url+str(i)+'.html'
                a= open_url(url_new)
                if i <= 1:
                  #new_href = re.findall(">([^<]+?)</a><a class='a1'[^>]+?>下一页</a>",a)
                  a_cont += 1#表示示正在下专辑序数
                if i!=int(new_href):#当前不是最后一页就找最后一页
                  new_href = re.findall(">([^<]+?)</a><a class='a1'[^>]+?>下一页</a>",a)
                headers={'Referer':url_new,
    'User-Agent':'Mozilla/5.0 (Window\
    s NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, \
    like Gecko) Chrome/53.0.2785.104 Safari/537.36 Core/1.53\
    .3103.400 QQBrowser/9.6.11372.400'}
                get_img(a,headers)
                print(i)
                print(new_href)
               
                print(a_cont)
                if i > 1:
                  if i==int(new_href):
                        break
               
                #time.sleep(0.1)
                time.sleep(0.2)
            os.chdir('..')
            if download_time_counter >= download_time:
                break
            download_time_counter +=1
            time.sleep(0.2)
      os.chdir('..')

如我想搜索穆菲菲 弹出下方窗口

这个只展示了页面中的数据,未显示共XX册里的数据,请问这个该怎么修改

hill_king 发表于 2019-10-2 15:31

:lol不懂,但是显示什么不是你自己定义的吗

风绕柳絮轻敲雪 发表于 2019-10-2 15:35

本帖最后由 风绕柳絮轻敲雪 于 2019-10-2 15:47 编辑

请求这个页面 https://www.nvshens.net/girl/22784/album/ajax/gallery_all_handler.ashx就得到完整的数据了

xiaobaitu66888 发表于 2019-10-2 17:18

风绕柳絮轻敲雪 发表于 2019-10-2 15:35
请求这个页面 https://www.nvshens.net/girl/22784/album/ajax/gallery_all_handler.ashx就得到完整的数 ...

这个是xhr里面的链接,这个我知道。
然而打开后还是选择不了全部相册

xiaobaitu66888 发表于 2019-10-2 17:20

hill_king 发表于 2019-10-2 15:31
不懂,但是显示什么不是你自己定义的吗

我自己定义的跟网站上展示出来的第一页面一致,没有更多相册里面的

风绕柳絮轻敲雪 发表于 2019-10-2 17:57

xiaobaitu66888 发表于 2019-10-2 17:18
这个是xhr里面的链接,这个我知道。
然而打开后还是选择不了全部相册

那就试试模拟点击{:301_997:}

fergusj 发表于 2019-10-2 17:59

github 上有现成的吧, 不用自己从头写啊

xiaobaitu66888 发表于 2019-10-2 18:09

fergusj 发表于 2019-10-2 17:59
github 上有现成的吧, 不用自己从头写啊

学习,学习

xiaobaitu66888 发表于 2019-10-2 18:17

fergusj 发表于 2019-10-2 17:59
github 上有现成的吧, 不用自己从头写啊

再说,github里面的都没实现这个功能

timsxh 发表于 2019-10-12 18:09

9102年了不要用 urllib 了,是 requests 不香吗网上的落后教程真的害死人。。。
页: [1]
查看完整版本: 小白爬取宅男女神网的一点小问题