前言 ?
大家早好、午好、晚好吖~
开发环境以及模块使用
-
Python 3.6
-
Pycharm
-
requests
-
re
单线程代码
import requests # 第三方模块 是需要我们安装 pip instlal requests read time out
import parsel # 第三方模块 pip install parsel
import re
import time
def change_title(title):
mode = re.compile(r'[\\\/\:\*\?\"\<\>\|]')
new_title = re.sub(mode, "_", title)
return new_title
time_1 = time.time()
# 请求网址
for page in range(1, 11):
url = f'https://www.fabiaoqing.com/biaoqing/lists/page/{page}.html'
# 请求头
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36'
}
# 返回网页源代码
response = requests.get(url=url, headers=headers)
# print(response.text)
# 解析数据 re css xpath
selector = parsel.Selector(response.text) # 把respons.text 转换成 selector 对象
# 第一次提取 提取所有的div标签内容
divs = selector.css('#container div.tagbqppdiv') # css 根据标签提取内容
for div in divs:
# 通过标签内容提取他的图片url地址
img_url = div.css('img::attr(data-original)').get()
# 提取标题
title = div.css('img::attr(title)').get()
# 获取图片的后缀名
name = img_url.split('.')[-1]
# 保存数据
# 因为文件命名不明还有 特殊字符 所以我们需要通过正则表达式 替换掉特殊字符
new_title = change_title(title)
# 对表情包图片发送请求 获取它二进制数据
img_content = requests.get(url=img_url, headers=headers).content
# 保存数据
try:
with open('img\\' + new_title + '.' + name, mode='wb') as f:
# 写入图片二进制数据
f.write(img_content)
print('正在保存:', title)
except:
pass
time_2 = time.time()
use_time = int(time_2) - int(time_1)
print(f'总共耗时:{use_time}秒')
- 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
源码、解答、教程加Q裙:261823976 点击蓝字加入【python学习裙】
多线程代码
import requests # 第三方模块 是需要我们安装 pip instlal requests read time out
import parsel # 第三方模块 pip install parsel
import re
import time
import concurrent.futures # 线程池
def change_title(title):
"""替换标题中的特殊字符"""
mode = re.compile(r'[\\\/\:\*\?\"\<\>\|]')
new_title = re.sub(mode, "_", title)
return new_title
def get_response(html_url):
"""对网站发送请求"""
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36'
}
repsonse = requests.get(url=html_url, headers=headers)
return repsonse
def save(title, img_url, name):
"""保存数据"""
img_content = get_response(img_url).content
try:
with open('img\\' + title + '.' + name, mode='wb') as f:
# 写入图片二进制数据
f.write(img_content)
print('正在保存:', title)
except:
pass
def main(html_url):
"""主函数"""
html_data = get_response(html_url).text
selector = parsel.Selector(html_data) # 把respons.text 转换成 selector 对象
# 第一次提取 提取所有的div标签内容
divs = selector.css('#container div.tagbqppdiv') # css 根据标签提取内容
for div in divs:
# 通过标签内容提取他的图片url地址
img_url = div.css('img::attr(data-original)').get()
# 提取标题
title = div.css('img::attr(title)').get()
# 获取图片的后缀名
name = img_url.split('.')[-1]
# 保存数据
# 因为文件命名不明还有 特殊字符 所以我们需要通过正则表达式 替换掉特殊字符
new_title = change_title(title)
save(new_title, img_url, name)
if __name__ == '__main__':
time_1 = time.time()
exe = concurrent.futures.ThreadPoolExecutor(max_workers=10)
for page in range(1, 201):
url = f'https://www.fabiaoqing.com/biaoqing/lists/page/{page}.html'
exe.submit(main, url)
exe.shutdown()
time_2 = time.time()
use_time = int(time_2) - int(time_1)
print(f'总共耗时:{use_time}秒')
- 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
尾语 ?
好了,我的这篇文章写到这里就结束啦!
有更多建议或问题可以评论区或私信我哦!一起加油努力叭(ง •_•)ง
喜欢就关注一下博主,或点赞收藏评论一下我的文章叭!!!