Python爬取堆糖帅哥照片

深碍√TFBOYSˉ_ 2021-12-16 00:37 270阅读 0赞
  1. import requests
  2. import urllib.parse
  3. import threading
  4. #当线程达到十个时就锁住
  5. thread_lock = threading.BoundedSemaphore(value=10)
  6. #function:获得json数据
  7. #url:api
  8. #page:返回json数据
  9. def get_page(url):
  10. #requests.get自带json.load 用于获取 page信息
  11. page = requests.get(url)
  12. #获取url的内容
  13. page = page.content
  14. #将字节转换成utf-8格式
  15. page = page.decode('utf-8')
  16. return page
  17. #function:获得所有页面的api
  18. #label为你要搜索的关键字
  19. #获取所有页面pages中的链接
  20. def pages_from_duitang(label):
  21. #创建pages 存放获取到的链接并返回
  22. pages = []
  23. url = "https://www.duitang.com/napi/blog/list/by_search/?kw={}&start={}&limit=1000"
  24. for index in range(0,3600,50):
  25. #两个变量分别替换两个占位符{}
  26. u = url.format(label,index)
  27. page = get_page(u)
  28. pages.append(page)
  29. return pages
  30. #function:获取单个图片地址
  31. #page是从get_page请求回来的页面信息
  32. #startpage是开始匹配的部分
  33. #endpart是字符串末尾匹配的部分
  34. def findall_in_page(page,startpage,endpart):
  35. #all_string存放所有的照片地址
  36. all_string = []
  37. end = 0
  38. while page.find(startpage,end)!=-1:
  39. #start为字符串开始的地址 ,从第end个字符开始查找,查找到第一个出现startpage的地址赋值给start
  40. start = page.find(startpage,end)+len(startpage)
  41. #从字符串第start位置开始查找,查到到第一个endpart字符串的位置
  42. end = page.find(endpart,start)
  43. #获得从start开始到end为止的字符串 赋值给变量 string
  44. string = page[start:end]
  45. #存入列表中
  46. all_string.append(string)
  47. return all_string
  48. #function:获取所有的图片地址
  49. #pages:从url请求的所有的页面信息
  50. def pic_urls_from_pages(pages):
  51. #print("啊哈,请给我一杯忘情水")
  52. #创建列表,存放所有的图片地址
  53. pic_urls = []
  54. #遍历所有的页面信息
  55. for page in pages:
  56. #获取一个的图片地址 赋值给urls
  57. urls = findall_in_page(page,'path":"','"')
  58. #print("urls is the {}".format(urls))
  59. #将获取到的单个图片地址添加到列表pic_urls中
  60. pic_urls.extend(urls)
  61. return pic_urls
  62. #function:下载图片并命名
  63. #url:下载图片的地址
  64. #n:照片的名字
  65. def download_pics(url,n):
  66. r = requests.get(url)
  67. #print("我是r[]",r)
  68. #生成图片的相对地址
  69. path = 'D:\\CodeProject\\pythonProject\\pics\\' + str(n) + '.jpg'
  70. #以可读写的方式打开二进制文件path
  71. with open(path,'wb') as f:
  72. #将r的内容读入到path的文件中
  73. f.write(r.content)
  74. #下载完毕,解锁
  75. thread_lock.release()
  76. #funtion:主函数
  77. #label:要爬取的关键字
  78. def main(label):
  79. print(label)
  80. #将关键字传入pages_from_duitang中,获得对应关键字的所有api 赋值给pages
  81. pages = pages_from_duitang(label)
  82. #将包含所有的api的pages传入到pic_urls_from_pages中,获得所有的图片地址 赋值给pic_urls
  83. pic_urls = pic_urls_from_pages(pages)
  84. n = 0
  85. #遍历所有的图片地址,传入到下载函数中下载图片
  86. for url in pic_urls:
  87. #n:待参数1:图片的名称
  88. n+=1
  89. print("正在下载第{}张图片".format(n))
  90. #上锁
  91. thread_lock.acquire()
  92. #url:待传入的参数2
  93. t = threading.Thread(target=download_pics,args=(url,n))
  94. t.start()
  95. main("帅哥")

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

发表评论

表情:
评论列表 (有 0 条评论,270人围观)

还没有评论,来说两句吧...

相关阅读

    相关 python 视频

    一、概述 爬取步骤 第一步:获取视频所在的网页 第二步:F12中找到视频真正所在的链接 第三步:获取链接并转换成机械语言 第四部:保存 二、分析视频链接