最近看了小甲鱼的爬虫教程,其中有一个是不使用Scrapy框架去爬取一个图片网的妹纸图系列的练手项目,但是现在距教程已经年代久远,图片网的网页框架已经和教程里面的不太一样,为了练习一下爬虫技术,记录一下这个爬取过程。
话不多说,直接post代码:(比较怕麻烦,代码说明放在注释)
import os
import urllib
import time
def url_open(url): #打开指定的网址进行获取资源(不在这里进行解码)
headers={
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36'
}
req = urllib.request.Request(url)
req.add_header('User-Agent','Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36')
response = urllib.request.urlopen(req)
html = response.read()
return html
def get_pages(url): #获取页面的编号(每个页面都对应一个图片)
html = url_open(url).decode('utf-8')
page_index1 = html.find('a href="/t/')+11
page_index2 = html.find('"',page_index1)
print(html[page_index1:page_index2])
return html[page_index1:page_index2]
def find_imgs(url2): #根据网页信息去爬取照片的网络地址
html = url_open(url2).decode('utf-8')
img_index1 = html.find('img src=')
# print(html[img_index1:img_index2])
img_addr = []
#print(imgsrc)
while img_index1 != -1:
img_index2 = html.find('.jpg',img_index1,img_index1+255)
if img_index2 != -1:
imgsrc = 'http:' + html[img_index1+9:img_index2+4]
img_addr.append(imgsrc)
else:
img_index2 =img_index1 + 9
img_index1 = html.find('img src=',img_index2)
print(img_addr)
return img_addr
def save_imgs(folder,img_addrs): #根据网络地址去爬取照片保存到指定文件夹
if img_addrs:
for each in img_addrs:
filename = each.split('/')[-1]
imgdata = url_open(each)
fd = open(filename,'wb')
fd.write(imgdata)
fd.close()
def getDate(): #获取当前时间
Y = str(time.localtime()[0])
M = str(time.localtime()[1])
D = str(time.localtime()[2])
h = str(time.localtime()[3])
m = str(time.localtime()[4])
s = str(time.localtime()[5])
realTime = Y+'年'+M+'月'+D+'日'+h+'时'+m+'分'+s+'秒'
return (realTime)
def download_mm(folder='mm',pages = 10):
now = getDate()
folder = 'mm-' + now #记录爬取的时间并且作为文件夹的名字
os.mkdir(folder)
os.chdir(folder)
url = 'http://jandan.net/ooxx'
url2 = 'http://jandan.net/t/'
page_url = int(get_pages(url)) #获取最新图片的页面编码
for i in range(pages): #爬 10 张图
page_index = str(page_url)
urlpage = url2 + page_index
page_url -= 1
print(urlpage)
img_addrs = find_imgs(urlpage)
save_imgs(folder,img_addrs)
time.sleep(2) #不使用代理下,如果爬取速度过快会被拦截IP
download_mm()