python学习之BeautifulSoup模块爬图
BeautifulSoup模块爬图学习HTML文本解析标签定位
网上教程多是爬mzitu,此网站反爬限制多了。随意找了个网址,解析速度有些慢。
脚本流程:首页获取总页数-->拼接每页URL-->获取每页中所有主题URL-->遍历图片源URL下载,保存
#python3
#coding:utf-8_
#_author: Jack
#_date: 2020/3/28 from bs4 import BeautifulSoup
import requests,os,sys,time DIR_PATH = os.path.dirname(os.path.abspath(__file__))
sys.path.append(DIR_PATH) HEADER = {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:74.0) Gecko/20100101 Firefox/74.0',
} def create_dir(file_path):
'''
:param file_path: images_directory
:return:
'''
if not os.path.exists(file_path):
os.makedirs(file_path)
print('Creatr directory:',file_path)
os.chdir(file_path) # cd .. def save_data(src,dir_name,file_name):
'''
:param src: images url
:param sum: directory name
:param file_name: image name
:return:
'''
file_path = os.path.join(DIR_PATH,'images',str(dir_name)) #directory path
image_path = os.path.join(file_path,file_name) #images path
create_dir(file_path) if not os.path.isfile(image_path):
req = requests.get(src,headers=HEADER)
with open(image_path, 'wb') as f_save:
f_save.write(req.content)
print('Download successful:',file_name)
f_save.flush()
else:
print('File already exists! Pass') def request_to_url(url,header):
'''
:param url: page_url
:param head: request.header
:return: respond.text
'''
res = requests.get(url,headers=header)
return res.text def soup(url,header):
'''
:param url:
:param header:
:return: HTML_Tag
'''
return BeautifulSoup(request_to_url(url,header),'html.parser') def action(url):
'''
Download a count of 100 images and create a new folder
:param url: URL
:return:
'''
download_count = 0
dir_name =100
try:
page_tag = soup(url,HEADER).find('div',class_='pg').find_all('a')
max_page = int(page_tag[-2].text.split(' ')[-1]) for i in range(1,max_page+1): #find page
page_url = os.path.join(url,'forum.php?order=&fid=0&page=%d'%i)
#time.sleep(1)
page_all_theme_list = soup(page_url,HEADER).find('div',class_='kind_show')
theme_list = page_all_theme_list.find_all('div', class_='photo_thumb kind_left') for i in theme_list: #find theme
theme = i.find('div', class_='title').find('a')
#title = theme.string
img_url = theme.get('href')
print("Ready download: %s" % theme.string,img_url)
# time.sleep(1)
img_page_tag = soup(img_url,HEADER).find('td',class_='t_f').find_all('img') for i in img_page_tag: #find image
try:
img_src = i.get('src')
if download_count %100 == 0:
dir_name +=100
save_data(img_src,dir_name,img_src.split('/')[-1])
download_count += 1
print('Download successful: %d' %download_count) except Exception as e:
print('Img_tag & Save_data Error:',e)
continue except Exception as e:
print('The trunk Error:',e) if __name__ == '__main__':
print('Run.....')
URL = 'http://www.lesb.cc/'
action(URL)
print('Perform !')
python学习之BeautifulSoup模块爬图的更多相关文章
- Python学习 Part4:模块
Python学习 Part4:模块 1. 模块是将定义保存在一个文件中的方法,然后在脚本中或解释器的交互实例中使用.模块中的定义可以被导入到其他模块或者main模块. 模块就是一个包含Python定义 ...
- python学习之argparse模块
python学习之argparse模块 一.简介: argparse是python用于解析命令行参数和选项的标准模块,用于代替已经过时的optparse模块.argparse模块的作用是用于解析命令行 ...
- Python学习day19-常用模块之re模块
figure:last-child { margin-bottom: 0.5rem; } #write ol, #write ul { position: relative; } img { max- ...
- Python学习day18-常用模块之NumPy
figure:last-child { margin-bottom: 0.5rem; } #write ol, #write ul { position: relative; } img { max- ...
- Python爬虫使用lxml模块爬取豆瓣读书排行榜并分析
上次使用了BeautifulSoup库爬取电影排行榜,爬取相对来说有点麻烦,爬取的速度也较慢.本次使用的lxml库,我个人是最喜欢的,爬取的语法很简单,爬取速度也快. 本次爬取的豆瓣书籍排行榜的首页地 ...
- 雨痕 的《Python学习笔记》--附脑图(转)
原文:http://www.pythoner.com/148.html 近日,在某微博上看到有人推荐了 雨痕 的<Python学习笔记>,从github上下载下来看了下,确实很不错. 注意 ...
- Python学习笔记-常用模块
1.python模块 如果你退出 Python 解释器并重新进入,你做的任何定义(变量和方法)都会丢失.因此,如果你想要编写一些更大的程序,为准备解释器输入使用一个文本编辑器会更好,并以那个文件替代作 ...
- python学习之random模块
Python中的random模块用于生成随机数.下面介绍一下random模块中最常用的几个函数. random.random random.random()用于生成一个0到1的随机符点数: 0 < ...
- Python 爬虫三 beautifulsoup模块
beautifulsoup模块 BeautifulSoup模块 BeautifulSoup是一个模块,该模块用于接收一个HTML或XML字符串,然后将其进行格式化,之后遍可以使用他提供的方法进行快速查 ...
随机推荐
- RocketMQ介绍与实践
一.RocketMQ介绍 1.相关术语名词 1. NameSrv:是一个几乎无状态节点,可集群部署,节点之间无任何信息同步. 2. Broker:分为Master与Slave,一个 ...
- C2C的道德边界:沦为从假运单到假病条的供假渠道
你可能刚开始学会不去看网购平台上商品回评中的虚假好评,却又要开始应对同事在朋友圈等平台买来的虚开病假条带来的困扰.最近各大媒体包括党报热传的网购病假条事件,再度将人们的目光集中在这个C2C模式之上.从 ...
- Javascript中的局部变量、全局变量的详解与var、let的使用区别
前言 Javascript中的变量定义方式有以下三种方式:1.直接定义变量,var与let均不写: a = 10; 2.使用var关键字定义变量 var a = 10; 3.使用let关键字定义变量 ...
- K-means真的不能使用曼哈顿距离吗?
问题 说到k-means聚类算法,想必大家已经对它很熟悉了,它是基于距离计算的经典无监督算法,但是有一次在我接受面试时,面试官问了我一个问题:“k-means为什么不能使用曼哈顿距离计算,而使用欧式距 ...
- java基础知识点补充---二维数组
#java基础知识点补充---二维数组 首先定义一个二维数组 int[][] ns={ {1,2,3,4}, {5,6,7,8}, {9,10,11,12}, {13,14,15,16} }; 实现遍 ...
- 解决ionic2/ionic3轮播图切换页面或者点击过后不自动轮图
我们在ionic2/ionic3开发的过程中会出现切换页面或者滑动切换轮播图出现轮播图不再轮播的情况,这其实需要一些配置. 首先在运用到轮播图的component中引入 import {ViewChi ...
- vue+element tree(树形控件)组件(1)
最近做了第一个组内可以使用的组件,虽然是最简版,也废了不少力.各位前辈帮我解决问题,才勉强搞定.让我来记录这个树形组件的编写过程和期间用到的知识点. 首先说说需求,就是点击出现弹窗+蒙板,弹窗内容是一 ...
- FreeModBus源码解析(1)---开篇
一.设计思想 任何通信协议的实现都是基于状态机的设计思想,就是来了一串数据判断是是干啥的在调用相应的处理函数只不过高手一般采用回调处理. 如果你熟悉了回调.源码里的状态机的实现又可以理解,那么恭喜你已 ...
- idea 2018.1激活方法
之前用的idea都是2017版本的,现在已经四月份了,对于2018年1月份的版本应该可以放心的用了. 在这里,仅提供2018版本的激活码. 至于安装步骤,这里省略一千个字...... 下面是具体的激活 ...
- 汇编语言-[bx]和loop指令和多个段
5.1 [BX]和内存单元的描述 要完成描述一个内存单元,需要两种信息: 内存单元的地址: 可以用 [0] 表示一个内存单元, 0 表示单元的偏移地址,段地址默认在 ds 中: 同样也可以用 [bx] ...