个人名片:
作者简介:一名大二在校生,热爱生活,爱好敲码!
\ 个人主页 :holy-wangle
➡系列内容: ️ tkinter前端窗口界面创建与优化
✨个性签名: 不积跬步,无以至千里;不积小流,无以成江海
CSDN的大佬们,傍晚好!!这是我学会爬虫的首作品,但是我还是想巩固一下我的学习成果!
想要拥有大量的好看的壁纸和头像?跟我这一篇文章学习,如果一键爬取吧!!!!!
先申明一下,我是小白中的小白!过程中注释语都可能用错,如果有什么用错的,请各位大佬指出,我不怕被笑,就怕笑了,不告诉我哪里错了,感谢啦!
先上代码!
# 导入需要用的模块
import requests
from lxml import etree
import os
# 创建一个:壁纸爬取类
class WallpaperCrawling(object):
# 初始化
def __init__(self):
self.url = 'https://xinzhuobu.com/?cat=23'
self.header = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) '
'Chrome/90.0.4430.85 Safari/537.36 Edg/90.0.818.49 '
}
# 爬取该url的网源代码并且转换为一般的形式然后返回这个值
@staticmethod
def crawling_page(url, header):
response = requests.get(url, headers=header)
# print(response)
response = requests.get(url, headers=header)
page_text = response.text
# print(page_text)
return page_text
# 进行解析代码,提取图片,并且存储
def solve_page(self, page, header):
# 这是一种解析方式不懂的可以上网查找
tree = etree.HTML(page)
li_list = tree.xpath('//div[@class="row posts-wrapper"]/div')
# 判断是否有当前目录下有没有这个文件夹:没有的话创建一个
if not os.path.exists('./picLibs'):
os.mkdir('./picLibs')
for li in li_list:
img_src = li.xpath('./article/div[@class="entry-media"]/div/a/img/@data-src')[0]
# print(img_src)
img_name = li.xpath('./article/div[@class="entry-media"]/div/a/img/@alt')[0] + '.jpg'
# 通用处理中文乱码解决方案
img_name = img_name.encode('utf-8').decode()
# 这里是把名字上面含有的不能作为命名名称的符号替换为“ ”(就是空)
img_name = img_name.replace('?', '').replace('*', '').replace('<', '').replace('> ', '').replace(':', '').replace(';', '').replace(',', '').replace('=', '')
# print(img_name,img_src)
# 请求图片,进行持久化存储
img_data = requests.get(url=img_src, headers=header).content
img_path = "picLibs/" + img_name
with open(img_path, 'wb') as fp:
fp.write(img_data)
print(img_name, '下载成功!!')
def run_spider(self):
# 获取page
home_page = self.crawling_page(self.url, self.header)
# 解析数据并且存储图片
self.solve_page(home_page, self.header)
if __name__ == '__main__':
spider = WallpaperCrawling()
spider.run_spider()
我们先到爬取的网站走走分析分析!!!gogo!
这里是网源代码
这里需要一点点HTML知识和解析的知识
tree = etree.HTML(page)
li_list = tree.xpath('//div[@class="row posts-wrapper"]/div')
# 判断是否有当前目录下有没有这个文件夹:没有的话创建一个
if not os.path.exists('./picLibs'):
os.mkdir('./picLibs')
for li in li_list:
img_src = li.xpath('./article/div[@class="entry-media"]/div/a/img/@data-src')[0]
# print(img_src)
img_name = li.xpath('./article/div[@class="entry-media"]/div/a/img/@alt')[0] + '.jpg'
面这里就是定位到所取图片的链接也需要一点点Xpath的基础知识不懂而且去了解一下!!!
提醒:读者如果下次爬取的时候记得先在pycharm上面爬取对应的网源代码看一下对应节点属性的名称是上面要不然的话,可能会爬取的位置不对!!这是我的亲身经历!!!
下面展示一下爬取的成果!!!
这是正文!!!!!!
这里只是爬取了当前这一页的壁纸而已,如果想要爬取全部页的代码点赞这一篇文章后可以私聊我,如果这一篇文章赞够20个我也会出爬取全部页的壁纸,不知道你的磁盘够不够装这些图片呢!!鼠鼠一篇文章都没有超过20个赞呢!
最后我想说的是我是小白中的小白,文章写不太好,排版也不美观,但是我想还是想分享一下,希望各位大佬能多多指教,评论区见。
然后我想对我的代码表达一下我自己的见解:
1.首先,代码还不够简洁,有部分的代码感觉还可以简短一点
2.然后,这个运行速度也不太乐观,想想再如何改进
3.还有,就是这里只是爬取一点部分,感兴趣可以去看看url里面的内容是动态加载图片的,我还不太会怎么处理
4.最后呢!!!!希望各位能多点指点小弟
好了,今天的分享就这么多了,有什么不清楚或者我写错的地方,请多多指教!
私信,评论我呗!!!!!!
关注我下一篇不迷路哦!