爬虫1

这是大概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()