标签:codeing 网站 直接 sleep 图片 乐趣 tail url excel
作为一个考研狗,每天除了日复一日的复习外,偶尔也想给自己寻找一些生活的小乐趣,今天突然想到了自己曾经稍微接触的爬虫,想看看可以爬取些图片放到电脑上,就花了些时间改了改之前的爬虫代码,爬取了一部分照片先量一下战绩吧。照片不多但也算是自己的一次爬虫小经验。
爬虫的网页很简单,照片真实路径都在页面中直接可以拿到
主要流程就是先进入照片浏览的主页,每个照片的主页都会链接几个照片页面,像下面这样,每个图片都会链接一个网页
图片链接的网页如下图所示
但是这个页面显示的图片还是不够高清,这个网站有一个规律,更高清的照片存放的网页就在现在这个页面的路径后跟一个 -1920x1080 的htm中,进入这个htm之后展示的照片才是我们要的,拿到图片的url就直接下载就好,就这样一直循环,所有的照片就都下载下来了。
import requests import time def downloadFile(name, url): try: headers = {‘Proxy-Connection‘: ‘keep-alive‘} r = requests.get(url, stream=True, headers=headers) print("=========================") print(r) length = float(r.headers[‘Content-length‘]) f = open(name, ‘wb‘) count = 0 count_tmp = 0 time1 = time.time() for chunk in r.iter_content(chunk_size=512): if chunk: f.write(chunk) # 写入文件 count += len(chunk) # 累加长度 # 计算时间 两秒打印一次 if time.time() - time1 > 2: p = count / length * 100 speed = (count - count_tmp) / 1024 / 1024 / 2 count_tmp = count print(name + ‘: ‘ + formatFloat(p) + ‘%‘ + ‘ Speed: ‘ + formatFloat(speed) + ‘M/S‘) time1 = time.time() f.close() return 1; except: print("出现异常") return 0; def formatFloat(num): return ‘{:.2f}‘.format(num) if __name__ == ‘__main__‘: downloadFile(‘D://file//photo//hd.jpg‘, ‘https://browser9.qhimg.com/bdr/__85/t01753453b660de14e9.jpg‘)
# -*- codeing = utf-8 -*- # @Time : 2021/6/19 23:01 # @Author : xiaow # @File : PhotoSpider.py # @Software : PyCharm from bs4 import BeautifulSoup # 网页解析 import xlwt # excel操作 import sqlite3 # 数据库操作 from api import spider2 as spider import time from api import FileDownload as fd import re # 正则表达式 imglink = re.compile(r‘<a href="(.*?)" target="_blank" title=".*?"><img alt=".*?" src=".*?"/><b>.*?</b></a>‘, re.S) img2link = re.compile(r‘<a href="(.*?)" target="_blank">.*?<span>(1680x1050)</span></a>‘, re.S) img3link = re.compile(r‘<img alt=".*?" src="(.*?)" title=".*?"/>‘, re.S) # 获取照片页面路径 def getPhoto(url): srcs = [] html = spider.askURL(url); bs = BeautifulSoup(html, "html.parser"); for item in bs.find_all(‘a‘, target="_blank"): item = str(item) src = re.findall(imglink, item) if (len(src) != 0): srcs.append("http://www.netbian.com" + src[0]) return srcs; # 照片主页显示的照片不够清楚,这里根据这个网站存储照片的规律,拼接了一个地址,这个地址的照片比较高清一些 def getPhotoUrl(url): purls = []; url3 = "http://www"; url2 = url.split(".") for j in range(1, len(url2)): if j == len(url2) - 2: url3 = url3 + "." + url2[j] + "-1920x1080" else: url3 = url3 + "." + url2[j] return (url3) # 下载照片 def downloadPhoto(url): html = spider.askURL(url); bs = BeautifulSoup(html, "html.parser"); for item in bs.find_all("img"): item=str(item) itemsrc=re.findall(img3link,item) if(len(itemsrc)!=0): return itemsrc[0] if __name__ == ‘__main__‘: src = "http://www.netbian.com/mei/index_"; # 拼接照片主页的路径 for i in range(2,163): time.sleep(5) src2 = ""; src2=src+str(i)+".htm" urls=getPhoto(src2) for j in range(len(urls)): time.sleep(3) fd.downloadFile(‘D://file//photo//hd‘+str(time.time())+".jpg",downloadPhoto(getPhotoUrl(urls[j])))
展示几张照片吧
有兴趣的可以看下我的csdn原文章 csdn链接
标签:codeing 网站 直接 sleep 图片 乐趣 tail url excel
原文地址:https://www.cnblogs.com/xiaowshuodedui/p/14918030.html