import requests
import re
import os
from bs4 import BeautifulSoup
from urllib.request import urlretrieve
'''
思路:获取网页信息---解析页面信息---模拟翻页---匹配所需数据---下载到本地文件
'''
baseurl = 'http://www.netbian.com/' # 基本的url
# 下载百分比
def downPercent(num, size, total): # 数据块数量,大小,总的数据量
result = num * size / total
result = 1.0 if result > 1.0 else result # 如果超过了1则下载完成了
if (result > 0.95): # 下载到95以上输出下载状态
print("当前的进度:{}".format(result * 100))
'''
获取当前页面信息,从里面找到我们所需的数据
'''
def getHtml(url):
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:79.0) Gecko/20100101 Firefox/79.0'
}
html = requests.get(url, headers=headers, timeout=5) # 伪装成浏览器访问
html.encoding = 'gbk'
return html
# code = re.findall(r'<meta charset="(.*?)" />', text)[0] #获取网页编码格式
# html.encoding = code #采用网页的编码格式是gbk
def pageHtml():
nextHtml = baseurl + '/index_{}.htm' # 下一页的格式
for page in range(1, 11): # 获取当前页的内容
getData(page, nextHtml.format(page) if page > 1 else baseurl) # 从第二页开始就采用下一页的格式
'''
获取网页信息
'''
def getData(page, url):
html1 = getHtml(url) # 第一层网页 获取数据的
print(url)
soup = BeautifulSoup(html1.content, "html.parser")
_list = str(soup.find_all(class_="list")[0])
print(soup.find_all(class_="list"))
layer1 = r'href="/(.*?htm)"' # 第一层网页的正则匹配,获取图片链接
datalist = re.findall(layer1, _list)
layer2 = r'<img src="(.*?)" alt='
jpglinks = []
for data in datalist:
html2 = getHtml(baseurl + data).text
jpg = re.findall(layer2, html2)[0]
jpglinks.append(jpg) # 将图片链接放进列表内
downData(jpglinks, page, 1) # 下载数据
'''
解析网页内容并下载
'''
def downData(jpglinks, page, num=1):
newpath = './images/页码{}'.format(page) # 指定的文件夹
try:
t = os.makedirs(newpath) # 创建新的文件夹
except FileExistsError:
print('文件夹存在,请删除文件夹 {} 再操作'.format(os.path.dirname(os.getcwd() + newpath.replace('.', ''))))
else:
for jpg in jpglinks:
path = newpath + '/图片{}.jpg'.format(num)
urlretrieve(jpg, path, downPercent) # 下载到指定文件夹
num += 1
def main():
pageHtml()
if __name__ == '__main__':
main()
网友评论