这是大概19年7月那会儿吧,写的第一个爬虫脚本,爬的是一个lsp常来的网站,那时候大部分还是想着练手,毕竟爬虫这玩意儿,我认为缺的从来不是技术,而是资源啊!下面是我写的源码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 #导入需要的库 import urllib.request import os import random ############################################################ ###这里是打开链接,我给爬虫赋予一个身份(浏览器)去访问想爬的网页。 ############################################################ def url_open(url): headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36"} r = urllib.request.Request(url, headers=headers) response = urllib.request.urlopen(r) html = response.read() return html #################################################### ###这里是获取页数,因为默认进去是最新的一页,比如24这样。 #################################################### def get_page(url): html = url_open(url).decode('utf-8') #print(html) a = html.find('current-comment-page') + 23 b = html.find(']', a) print('get_page:',html[a:b]) return html[a:b] #################################################### ###这里是获取页数所对应的链接,方便之后跳转下一页爬取 #################################################### def get_url(url): html = url_open(url).decode('utf-8') c = html.find('Older Comments')+22 d = html.find('"', c) print('ger_url',html[c:d]) return html[c:d] #################################################### ###这里是获取图片的链接 #################################################### def find_imgs(url): html = url_open(url).decode('utf-8') img_addrs = [] a = html.find('img src=') #print('find_images:a:', a) while a != -1: b = html.find('.jpg', a, a+255) #print('此时的b:', b) if b != -1: if '//cdn' in html[a+9:b+4]: break #print('html图片内容:', html[a+9:b+4]) img_addrs.append(html[a+9:b+4]) else: b = a + 9 a = html.find('img src=', b) #print('此时的a:', a) #print('图片列表:', img_addrs) return img_addrs #################################################### ###这里是下载存储图片 #################################################### def save_imgs(folder, img_addrs): for each in img_addrs: filename = each.split('/')[-1] with open(filename, 'wb') as f: img = url_open('http:'+ each) f.write(img) #################################################### ###这里是整个程序的主模块,程序运行时优先运行该模块的内容 #################################################### def download_mm(): url = 'http://jandan.net/girl' page_num = int(get_page(url)) print('本次可下载最大页数为', page_num) folder = input('请输入保存图片的文件夹名称:') pages = int(input('请输入下载页数(不可超过网页显示最大页数):')) os.mkdir(folder) os.chdir(folder) for i in range(pages): '''if page_num == 0: print('循环结束,退出循环') break ''' if i == 0: page_url = 'http://jandan.net/girl' else: page_url = 'http:'+ get_url(url) print('page_url', page_url) img_addrs = find_imgs(page_url) save_imgs(folder, img_addrs) url = page_url #print('for循环url:', url) page_num -= 1 #print('page_num', page_num) #print(' ') print('下载结束') #################################################### ###这里的意思是让程序运行的时候优先运行download_mm()模块 #################################################### if __name__== '__main__': download_mm()