欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

python—多协程爬取斗鱼高颜值美女图片-2.0版本

程序员文章站 2023-11-06 08:33:10
前几天写的‘python—多协程爬取斗鱼高颜值美女图片’,已经失效,斗鱼已经修改了网页的源代码。 今天重新写了一个新版本 说明: (1)之前的版本只要将代码中的‘data-original’改为‘src’,能爬取一小部分的高颜美女,大部分图片都是黑白斗鱼字图片。 (2)现在2.0版本爬取的图片每张图 ......

前几天写的‘python—多协程爬取斗鱼高颜值美女图片’,已经失效,斗鱼已经修改了网页的源代码。

今天重新写了一个新版本

说明:

(1)之前的版本只要将代码中的‘data-original’改为‘src’,能爬取一小部分的高颜美女,大部分图片都是黑白斗鱼字图片。

(2)现在2.0版本爬取的图片每张图片分为big和small两种像素的图片也就是以前图片的两倍-480张,不同的像素看起来有不同的感觉。

 1 import requests
 2 import re
 3 # from bs4 import beautifulsoup
 4 from urllib import request
 5 # import threading
 6 import gevent
 7 from gevent import monkey
 8 
 9 monkey.patch_all()
10 
11 def get_html_text(url):
12     try:
13         r = requests.get(url, timeout=10)
14         r.raise_for_status()
15         r.encoding = r.apparent_encoding
16         print(len(r.text))
17         return r.text
18     except exception as result:
19         print('错误类型:', result)
20 
21 
22 def html_text_parser(img_list, html):
23 
24 # 下面是修改的重点部分,采用了正则表达式,没有采用bs4
25 # 技术大神可以研究一下斗鱼这个网页的源代码,真正的图片信息都存储在后面,不是传统的
  # html,我还没怎么接触过前端的知识,不知怎么使用bs4,所以使用了正则表达式。 26 27 img_pat = r'"rs\w+":"(.*?)"' 28 links = re.compile(img_pat, re.s).findall(html) 29 # print(len(links)) 30 # print(links) 31 for link in links: 32 if link: 33 img_list.append(link) 34 return img_list 35 36 37 38 39 def get_douyu_img(img_list): 40 for i,j in enumerate(img_list): 41 # name = j.split('.')[-1] 42 r = request.urlopen(j) 43 ima_content = r.read() 44 path = str(i) 45 with open(path, 'wb') as f: 46 f.write(ima_content) 47 48 def main(): 49 url = 'https://www.douyu.com/g_yz' 50 html = get_html_text(url) 51 img_list = list() 52 img_list = html_text_parser(img_list, html) 53 # print(img_list) 54 #t1 = threading.thread(target=get_html_text, args=(url,)) 55 #t2 = threading.thread(target=html_text_parser, args=(img_list,html)) 56 #t3 = threading.thread(target=get_douyu_img, args=(img_list,)) 57 #t1.start() 58 #t2.start() 59 #t3.start() 60 gevent.joinall([ 61 gevent.spawn(get_html_text, url), 62 gevent.spawn(html_text_parser, img_list, html), 63 gevent.spawn(get_douyu_img, img_list) 64 ]) 65 66 67 if __name__ == '__main__': 68 main()

python—多协程爬取斗鱼高颜值美女图片-2.0版本