快捷导航

扫码登录,快人一步

切换风格

默认淡黄 红色 蓝色 黄色 灰蓝 淡绿 咖啡色 紫色 青色

版块导航

资源分享
游戏分享精品软件技术教程开源交流活动线报游戏辅助值得一看值得一听
站内管理
站务公告曝光举报
社区广场
交易商城福利资源悬赏问答悬赏取消贴回收灌水广场

内容详情

查看: 725|回复: 0

[其他源码] python爬取福利网站图片完整代码,懂得人都懂

        

已抛锚 成长值: 20

资源岛龄
0.9岁
累计签到:5 天
连续签到:1 天

Y先生 Lv.6

2020-11-11 22:53:21 | 只看作者
资源岛:这是一个创建于 221 天前的主题,其中的信息可能已经有所更新或者失效!请在本站搜索相关关键词看看是不是有更新了!!
  1. import requests,bs4,re,os,threading



  2. class MeiNvTu:

  3.     def __init__(self):

  4.         self.url_main='https://网址失密,不克不及治收哈哈/pw/'

  5.         self.url=f'{self.url_main}thread.php?fid='

  6.     def getPageMax(self,typeID=14):

  7.         try:

  8.             res = requests.get(f'{self.url}{typeID}')

  9.             res.encoding = 'utf-8'

  10.             soup = bs4.BeautifulSoup(res.text, 'lxml')

  11.             pageNum = soup.select('#main > div > span.fl > div.pages.cc > span')

  12.             pageNum = int(re.search('/(.*?)Go', str(pageNum)).group(1))

  13.             return pageNum

  14.         except:

  15.             return 0

  16.     def getTitleList(self,typeID=14,page=1):

  17.         '''

  18.         爬与栏目里某一页的列表,收集毛病返回False

  19.         :param typeID:

  20.         :param page:

  21.         :return:

  22.         '''

  23.         try:

  24.             res=requests.get(f'{self.url}{typeID}&page={page}')

  25.             res.encoding= 'utf-8'

  26.             soup=bs4.BeautifulSoup(res.text,'lxml')

  27.             listTitle=soup.select('tr > td > h3')

  28.             lists=[]

  29.             for item in listTitle:

  30.                 if 'html_data' in item.a['href'] :

  31.                     d={}

  32.                     d['href']=self.url_main+item.a['href']

  33.                     d['title']=item.a.text

  34.                     lists.append(d)

  35.             return lists

  36.         except:

  37.             return False

  38.     def downImg(self,url,path):

  39.         '''

  40.         下载一全部页里的图片

  41.         :param url:

  42.         :param path:

  43.         :return:

  44.         '''

  45.         global pool_sema

  46.         res = requests.get(url)

  47.         res.encoding = 'utf-8'

  48.         soup = bs4.BeautifulSoup(res.text, 'lxml')

  49.         imgs=soup.select('#read_tpc > img')

  50.         lists=[]

  51.         try:

  52.             for i,item in enumerate(imgs):



  53.                 imgUrl=re.search("window.open\('(.*?)'\);", str(item['onclick'])).group(1)

  54.                 imgData=requests.get(imgUrl).content

  55.                 typ=imgUrl.split('.')[-1]

  56.                 with open(f'{path}{i}.{typ}','wb')as f:

  57.                     f.write(imgData)

  58.         except:

  59.             print('\033[31m[下载失利!收集非常] ' + path)

  60.             pool_sema.release()

  61.             return



  62.         #将下载好的状况记载下去,下次能够跳过

  63.         textpath=''

  64.         for item in path.split('\\')[0:3]:

  65.             textpath=textpath+item+'\\'

  66.         mutex.acquire()

  67.         try:

  68.             with open(textpath+'log.txt','a')as f:

  69.                f.writelines(path.split('\\')[3]+'\n\r')

  70.         except:

  71.             pass

  72.         mutex.release()

  73.         # 完成后线程池记载-1

  74.         print('\033[31m[完成下载] '+path)

  75.         pool_sema.release()

  76.     def get_typeTitle(self,id):

  77.         '''

  78.         返回范例的题目

  79.         :param id:

  80.         :return:

  81.         '''

  82.         if id==14:

  83.             return '唯好写实'

  84.         if id==15:

  85.             return '网友马赛克'

  86.         if id==16:

  87.             return '暴露马赛克'

  88.         if id==49:

  89.             return '街拍马赛克'

  90.         if id==21:

  91.             return '丝袜好腿'

  92.         if id==114:

  93.             return '西欧马赛克'

  94.     def downloadthe(self,title,path):

  95.         '''

  96.         判定能否曾经下载过,下载过返回True,出下载过返回False

  97.         :param title:

  98.         :param path:

  99.         :return:

  100.         '''



  101.         try:

  102.             with open(path+'log.txt', 'r')as f:

  103.                 text = f.read()

  104.             if title in text:

  105.                 return True

  106.             else:

  107.                 return False

  108.         except:

  109.             return False

  110.     def get_Page_History(self,path):

  111.         '''

  112.         读与上一次完毕 的页码

  113.         :param path:

  114.         :return:

  115.         '''

  116.         try:

  117.             with open(path+'pagelog.ini','r')as f:

  118.                 return int(f.read())

  119.         except:

  120.             return 0

  121. if __name__ == '__main__':

  122.     # 限定线程数目

  123.     pool_sema = threading.BoundedSemaphore(70)

  124.     # 创立互斥体

  125.     mutex = threading.Lock()

  126.     #创立爬与工具

  127.     mnt=MeiNvTu()

  128.     #栏目id

  129.     typeID=21

  130.     #得到最年夜页数

  131.     page_max=mnt.getPageMax(typeID)

  132.     if page_max==0:

  133.         print('\033[31m收集毛病!,总页数为0')

  134.     else:

  135.         path_main= f"D:\\爬与的网站图片\\{mnt.get_typeTitle(typeID)}"

  136.         if os.path.isdir(path_main) != True:

  137.             os.makedirs(path_main, mode=0o777)

  138.         #爬与某页的列表

  139.         page_History=mnt.get_Page_History(path_main)

  140.         for i in range(page_max):

  141.             #跳过之前下载过的页码

  142.             if i+1<page_History:

  143.                 print(f'\033[37m跳过页码:{i + 1}')

  144.                 continue

  145.             #记载下去页码

  146.             with open(path_main+'pagelog.ini','w')as f:

  147.                 f.write(str(i+1))

  148.             print(f'\033[37m当前页码:{i+1}')

  149.             titleList = mnt.getTitleList(typeID, i + 1)

  150.             if titleList==False:

  151.                 print('\033[31m收集毛病!,列表获得失利!')

  152.                 break

  153.             for item in titleList:

  154.                 title=item['title'].replace(' ','').replace(':','').replace('!','').replace('?','').replace('*','').replace('"','')

  155.                 path = path_main + title + ""

  156.                 #判定能否有那个目次,出有的话便成立

  157.                 if os.path.isdir(path) != True:

  158.                     os.makedirs(path, mode=0o777)

  159.                 if mnt.downloadthe(title,path_main)==False:

  160.                     # 线程池记载+1

  161.                     pool_sema.acquire()

  162.                     print('\033[37m[开端下载] '+path)

  163.                     # 爬与某个题目中的一切图片

  164.                     t=threading.Thread(target=mnt.downImg,args=(item['href'], path))

  165.                     t.setDaemon(True)

  166.                     t.start()

  167.                 else:

  168.                     print('\033[35m发明下载过的:',title,' 曾经智能跳过!')
复造代码
python爬与祸利网站图片完好代码,明白人皆懂5714 做者:Y师长教师 帖子ID:3647 python,祸利人,

楼主新贴

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请记得给回答者最佳答案

如何回报帮助你解决问题的吧友,一个好办法就是给对方加【好评】【岛豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

快速回复换一批
好贴支持!
感谢楼主,好人一生平安
路过留名
好贴帮顶
太好了,我要的资源在资源岛找到了!
发贴规则: 
这个非常重要!不要乱回复字符!有快捷回复不要乱回复乱七八糟的内容!
不会回复请的回复:想要的资源在资源岛找到了!
1.严禁网友在版块内散播或制造任何与事实不符的言论。您的任何不良言论都将可能给第三方造成恶劣影响,相信您也不想受到同等待遇,请理解配合。
2.严禁将帖子发至无关版面,请选择对应版块发贴,以维护论坛的系统性和整洁性。
3.帖子标题请尽量与帖子内容相符,恶意欺骗性质或者标题过于刺激者,删除。
4.严禁因观点不同或讨论立场有异在版块上发表针对他人的嘲笑、讽刺、漫骂等人身攻击言论,盼会员间能雅量和谐、理性讨论。
您需要登录后才可以回帖 登录 | 立即注册

关闭
发布主题 快速回复 返回列表 客服中心 搜索 官方QQ群

首页

论坛

导读

我的

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