好家伙,写爬虫

 

代码:

import requests
import re
import os
from collections import Counter
import xlwt
# 创建Excel文件
workbook = xlwt.Workbook(encoding='utf-8')
worksheet = workbook.add_sheet('url_list') # 将数据写入Excel文件
worksheet.write(0, 0, '序号') #写入对应的字段
worksheet.write(0, 1, '图片详细地址')
worksheet.write(0, 2, '图片TAG') def get_response(html_url):
headers ={
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36 Edg/114.0.1823.43'
}
response = requests.get(url=html_url,headers=headers)
return response def get_img_src(html_url):
#获取榜单地址
response =get_response(html_url)
list_url =re.findall('<img src="(.*?)"',response.text)
return list_url def get_img_src_ciping(html_url):
#获取榜单地址
response =get_response(html_url)
# print(response.text)
list_url =re.findall('title="(.*?)">',response.text)
if(list_url):
return list_url[0]
else:
return "无内容" url = 'https://wallspic.com/cn/topic/pc_wallpapers'
response = get_response(html_url=url)
html_code = response.text
# print(html_code) # 定义正则表达式匹配模式
pattern = r'"link":"(.*?)"' # 使用re.findall()方法获取所有匹配结果
result_list = re.findall(pattern, html_code) cleaned_urls_1 = []
for url in result_list:
cleaned_url = url.replace("\\/\\/", "/")
cleaned_url = url.replace("\\/", "/")
cleaned_urls_1.append(cleaned_url)
print(cleaned_url) cleaned_urls_2 = []
cleaned_urls_3 = []
for url in cleaned_urls_1:
# 使用os.path.splitext()方法将URL路径拆分为文件名和扩展名
filename, ext = os.path.splitext(url)
# 判断扩展名是否为.jpg
if ext.lower() == '.jpg':
cleaned_urls_2.append(url)
if ext.lower() != '.jpg' and ext.lower() !='.webp':
cleaned_urls_3.append(url) # print(cleaned_urls_2) save_dir = 'C:/Users/10722/Desktop/python答辩/canuse/img/' # 指定保存路径 if not os.path.exists(save_dir):
os.makedirs(save_dir) #下载图片
row = 1
for url in cleaned_urls_2:
worksheet.write(row, 0, row+1) #将排行写入excel表格
worksheet.write(row, 1, url) #将歌名写入excel表格 filename = os.path.basename(url) # 获取文件名
filepath = os.path.join(save_dir, filename) # 拼接保存路径和文件名 response = requests.get(url)
with open(filepath, 'wb') as f:
f.write(response.content)
print(f'{filename} 下载完成')
row+=1 print('全部图片下载完成') cleaned_urls_4 =[]
roww = 1
for url in cleaned_urls_3:
# print(url) response=get_img_src_ciping(html_url=url)
# print(response) worksheet.write(roww, 2, response) #将tag写入excel表格
roww+=1
cleaned_urls_4.append(response) print(cleaned_urls_4)
# urls=str(cleaned_urls_4)
# 将数组中的字符串拼接成一个长字符串
long_string = " ".join(cleaned_urls_4) # 使用空格将长字符串分割成一个单词列表
word_list = long_string.split() # 使用Counter对单词列表进行词频统计
word_counts = Counter(word_list) words =str(word_counts) worksheet.write(roww, 2, words) #将歌手写入excel表格
print(word_counts)
workbook.save('C:/Users/10722/Desktop/python答辩/canuse/图片详情.xls')

Pachong.py

效果展示

 

上次爬虫去答辩了,爬的酷狗音乐的某个排行榜,

老师问我为什么没有把音乐也爬下来,

然后去翻了一下,这个音乐加密有点超出我的能力范围了(他真的太会藏了)

重写吧

我决定换个网站,爬个图片吧

找个壁纸网站

最佳 电脑壁纸 [30000+] |在 Wallspic 上免费下载

看上去好爬

 可以直接拿到图片的src

开干!

依旧按照以下思路进行

1.发请求,随后拿到服务器发过来的.html文件

2.用正则表达式去套对应的,我们需要的数据

3.处理数据,最后把他们以某种方式呈现

1.发请求拿到.html文件

url = 'https://wallspic.com/cn/topic/pc_wallpapers'
response = get_response(html_url=url)
html_code = response.text
print(html_code)

来看看拿到的.html文本

我们并不能很直观的直接拿到<img>标签中的src

他似乎是通过某种方式注入

2.拿到图片的src

但是没有太大问题,我们依旧能够找到其中的src

用一个方法()把他们"过滤出来"

cleaned_urls_1 = []
for url in result_list:
cleaned_url = url.replace("\\/\\/", "/")
cleaned_url = url.replace("\\/", "/")
cleaned_urls_1.append(cleaned_url)
print(cleaned_url)

 来看看

 这里可以看到,在这些地址中,以两条为一组,其中,第一条为该壁纸的详情页,第二条为该壁纸的真正src

随后,可以想个办法把他们分别放到不同的数组中

cleaned_urls_2 = []
cleaned_urls_3 = []
for url in cleaned_urls_1:
# 使用os.path.splitext()方法将URL路径拆分为文件名和扩展名
filename, ext = os.path.splitext(url)
# 判断扩展名是否为.jpg
if ext.lower() == '.jpg':
cleaned_urls_2.append(url)
if ext.lower() != '.jpg' and ext.lower() !='.webp':
cleaned_urls_3.append(url)

这里偷个懒,直接使用第三方插件os去做一个拆分,然后用ext.lower拿到他们的后缀,再进行一个判断

把两种地址分类,把他们放到不同的数组中,

详情页在后面有用,要对图片的TAG进行一个词频统计

3.下载图片到本地

save_dir = 'C:/Users/10722/Desktop/python答辩/canuse/img/'  # 指定保存路径

if not os.path.exists(save_dir):
os.makedirs(save_dir) #下载图片
row = 1
for url in cleaned_urls_2:
worksheet.write(row, 0, row+1) #将排行写入excel表格
worksheet.write(row, 1, url) #将歌名写入excel表格 filename = os.path.basename(url) # 获取文件名
filepath = os.path.join(save_dir, filename) # 拼接保存路径和文件名 response = requests.get(url)
# with open(filepath, 'wb') as f:
# f.write(response.content)
# print(f'{filename} 下载完成')
row+=1 print('全部图片下载完成')

这里用response发一个get请求就可以了,

4.词频统计

这里同样的,我们去到图片的详情页,然后用一个正则表达式去套图片的TAG

def get_img_src_ciping(html_url):
#获取榜单地址
response =get_response(html_url)
# print(response.text)
list_url =re.findall('title="(.*?)">',response.text)
if(list_url):
return list_url[0]
else:
return "无内容"

再使用插件collections去统计词频

cleaned_urls_4 =[]
roww = 1
for url in cleaned_urls_3:
# print(url) response=get_img_src_ciping(html_url=url)
# print(response) worksheet.write(roww, 2, response) #将tag写入excel表格
roww+=1
cleaned_urls_4.append(response) print(cleaned_urls_4)
# urls=str(cleaned_urls_4)
# 将数组中的字符串拼接成一个长字符串
long_string = " ".join(cleaned_urls_4) # 使用空格将长字符串分割成一个单词列表
word_list = long_string.split() # 使用Counter对单词列表进行词频统计
word_counts = Counter(word_list) words =str(word_counts)

然后就,搞定啦

完整代码:

import requests
import re
import os
from collections import Counter
import xlwt
# 创建Excel文件
workbook = xlwt.Workbook(encoding='utf-8')
worksheet = workbook.add_sheet('url_list') # 将数据写入Excel文件
worksheet.write(0, 0, '序号') #写入对应的字段
worksheet.write(0, 1, '图片详细地址')
worksheet.write(0, 2, '图片TAG') def get_response(html_url):
headers ={
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36 Edg/114.0.1823.43'
}
response = requests.get(url=html_url,headers=headers)
return response def get_img_src(html_url):
#获取榜单地址
response =get_response(html_url)
list_url =re.findall('<img src="(.*?)"',response.text)
return list_url def get_img_src_ciping(html_url):
#获取榜单地址
response =get_response(html_url)
# print(response.text)
list_url =re.findall('title="(.*?)">',response.text)
if(list_url):
return list_url[0]
else:
return "无内容" url = 'https://wallspic.com/cn/topic/pc_wallpapers'
response = get_response(html_url=url)
html_code = response.text
# print(html_code) # 定义正则表达式匹配模式
pattern = r'"link":"(.*?)"' # 使用re.findall()方法获取所有匹配结果
result_list = re.findall(pattern, html_code) cleaned_urls_1 = []
for url in result_list:
cleaned_url = url.replace("\\/\\/", "/")
cleaned_url = url.replace("\\/", "/")
cleaned_urls_1.append(cleaned_url)
print(cleaned_url) cleaned_urls_2 = []
cleaned_urls_3 = []
for url in cleaned_urls_1:
# 使用os.path.splitext()方法将URL路径拆分为文件名和扩展名
filename, ext = os.path.splitext(url)
# 判断扩展名是否为.jpg
if ext.lower() == '.jpg':
cleaned_urls_2.append(url)
if ext.lower() != '.jpg' and ext.lower() !='.webp':
cleaned_urls_3.append(url) # print(cleaned_urls_2) save_dir = 'C:/Users/10722/Desktop/python答辩/canuse/img/' # 指定保存路径 if not os.path.exists(save_dir):
os.makedirs(save_dir) #下载图片
row = 1
for url in cleaned_urls_2:
worksheet.write(row, 0, row+1) #将排行写入excel表格
worksheet.write(row, 1, url) #将歌名写入excel表格 filename = os.path.basename(url) # 获取文件名
filepath = os.path.join(save_dir, filename) # 拼接保存路径和文件名 response = requests.get(url)
# with open(filepath, 'wb') as f:
# f.write(response.content)
# print(f'{filename} 下载完成')
row+=1 print('全部图片下载完成') cleaned_urls_4 =[]
roww = 1
for url in cleaned_urls_3:
# print(url) response=get_img_src_ciping(html_url=url)
# print(response) worksheet.write(roww, 2, response) #将tag写入excel表格
roww+=1
cleaned_urls_4.append(response) print(cleaned_urls_4)
# urls=str(cleaned_urls_4)
# 将数组中的字符串拼接成一个长字符串
long_string = " ".join(cleaned_urls_4) # 使用空格将长字符串分割成一个单词列表
word_list = long_string.split() # 使用Counter对单词列表进行词频统计
word_counts = Counter(word_list) words =str(word_counts) worksheet.write(roww, 2, words) #将歌手写入excel表格
print(word_counts)
workbook.save('C:/Users/10722/Desktop/python答辩/canuse/图片详情.xls')
# <img width="500" height="281" class="deferred_image deferred_image-clear" src="https://img2.wallspic.com/previews/2/2/8/3/7/173822/173822-kui_jia-dian_shi-chao_ji_ying_xiong-kong_jian-dong_zuo_mao_xian_de_you_xi-500x.jpg" alt="图片 盔甲, 电视, 超级英雄, 空间, 动作冒险的游戏">

Python爬虫(二):写一个爬取壁纸网站图片的爬虫(图片下载,词频统计,思路)的更多相关文章

  1. python利用urllib实现的爬取京东网站商品图片的爬虫

    本例程使用urlib实现的,基于python2.7版本,采用beautifulsoup进行网页分析,没有第三方库的应该安装上之后才能运行,我用的IDE是pycharm,闲话少说,直接上代码! # -* ...

  2. scrapy框架来爬取壁纸网站并将图片下载到本地文件中

    首先需要确定要爬取的内容,所以第一步就应该是要确定要爬的字段: 首先去items中确定要爬的内容 class MeizhuoItem(scrapy.Item): # define the fields ...

  3. # [爬虫Demo] pyquery+csv爬取猫眼电影top100

    目录 [爬虫Demo] pyquery+csv爬取猫眼电影top100 站点分析 代码君 [爬虫Demo] pyquery+csv爬取猫眼电影top100 站点分析 https://maoyan.co ...

  4. 利用requests和BeautifulSoup爬取菜鸟教程的代码与图片并保存为markdown格式

    还是设计模式的开卷考试,我想要多准备一点资料,于是写了个爬虫爬取代码与图片,有巧妙地进行格式化进一步处理,最终变为了markdown的格式 import requests from bs4 impor ...

  5. Hello Python!用 Python 写一个抓取 CSDN 博客文章的简单爬虫

    网络上一提到 Python,总会有一些不知道是黑还是粉的人大喊着:Python 是世界上最好的语言.最近利用业余时间体验了下 Python 语言,并写了个爬虫爬取我 csdn 上关注的几个大神的博客, ...

  6. 初识python 之 爬虫:爬取某网站的壁纸图片

    用到的主要知识点:requests.get 获取网页HTMLetree.HTML 使用lxml解析器解析网页xpath 使用xpath获取网页标签信息.图片地址request.urlretrieve ...

  7. python爬虫--爬取某网站电影下载地址

    前言:因为自己还是python世界的一名小学生,还有很多路要走,所以本文以目的为向导,达到目的即可,对于那些我自己都没弄懂的原理,不做去做过多解释,以免误人子弟,大家可以网上搜索. 友情提示:本代码用 ...

  8. 用Python爬虫爬取炉石原画卡牌图片

    前段时间看了点Python的语法以及制作爬虫常用的类库,于是动手制作了一个爬虫尝试爬取一些炉石原画图片.本文仅记录对特定目标网站的分析过程和爬虫代码的编写过程.代码功能很局限,无通用性,仅作为一个一般 ...

  9. Python爬虫之selenium爬虫,模拟浏览器爬取天猫信息

    由于工作需要,需要提取到天猫400个指定商品页面中指定的信息,于是有了这个爬虫.这是一个使用 selenium 爬取天猫商品信息的爬虫,虽然功能单一,但是也算是 selenium 爬虫的基本用法了. ...

  10. Scrapy分布式爬虫打造搜索引擎- (二)伯乐在线爬取所有文章

    二.伯乐在线爬取所有文章 1. 初始化文件目录 基础环境 python 3.6.5 JetBrains PyCharm 2018.1 mysql+navicat 为了便于日后的部署:我们开发使用了虚拟 ...

随机推荐

  1. 关于java.lang.Object类、equals()、toString()的使用、以及方法得重载和重写得一些笔记

    java.lang.Object类 * 1.Object类是所有Java类的根父类; * 2.如果在类的声明中未使用extends关键字指明其父类,则默认父类为java.lang.Object类 * ...

  2. vmware中安装windows11系统

    1.官网下载windwos11镜像(点击跳转下载) 2.打开vmware,创建新的虚拟机 3.选择典型方便快捷 4.选择安装程序光盘文件,点击浏览选择刚刚下载好的iso镜像 5.选择windows版本 ...

  3. mysql的查询--子查询,order by,group by,having

    一. 1.多表查询 格式1: select 字段列表 from 表1 join 表2 on 表1.字段1=表2.字段1 where 查询条件 格式2: select 字段列表 from 表1 join ...

  4. Java设计模式 —— 组合模式

    11 组合模式 11.1 组合模式概述 Composite Pattern: 组合多个对象形成树形结构以表示具有部分-整体关系的层次结构.组合模式使得客户端可以统一处理单个对象和组合对象. 组合模式关 ...

  5. 使用 LoRA 和 Hugging Face 高效训练大语言模型

    在本文中,我们将展示如何使用 大语言模型低秩适配 (Low-Rank Adaptation of Large Language Models,LoRA) 技术在单 GPU 上微调 110 亿参数的 F ...

  6. YII2.0框架分页

    这篇文章主要介绍了Yii分页用法,以实例形式详细分析了比较常见的几种分页方法及其应用特点,非常具有实用价值,需要的朋友可以参考下: 在这里我主要联查的 book 表和 book_press 两张表进行 ...

  7. 【深度学习】【图像分类网络】(二)VisionTransformer

    Transformer简介 ![1png](file:///D:/资料/学习笔记/深度学习/图像分类/transformer/Self-Attention以及Multi-Head Attention/ ...

  8. Docker认识、Docker安装

    一.免费版和企业版 Docker-CE指Docker社区版,由社区维护和提供技术支持,为免费版本,适合个人开发人员和小团队使用. Docker-EE指Docker企业版,为收费版本,由售后团队和技术团 ...

  9. vsftpd[9183]: warning: can't get client address: Socket operation on non-socket

    今天在linux redhat7.2下执行service vsftpd start一直不能开启vsftpd服务,本来怀疑SELINUX的问题(其他ftp下载问题可以看下我的另外一篇博客Linux下ft ...

  10. 快速上手Linux核心命令(十一):Linux用户相关命令

    目录 前言 useradd 创建用户 usermod 修改用户信息 userdel 删除用户 groupadd 创建新的用户组 groupdel 删除用户组 passwd 修改用户密码 chage 修 ...