爬虫实战:女朋友的命令不得不立马安排

  • 前言
  • 数据来源
  • 数据爬取
  • 完整代码
  • 后序

前言

今天俺女朋友说她想换情侣头像了,但是没有啥可选的图片,我说你先别急,等我一会儿。

我冲冲冲赶紧爬取了2w张图片,随她想咋挑就咋挑。


部分图片展示

数据来源

urlhttps://www.woyaogexing.com/


情侣专区https://www.woyaogexing.com/touxiang/qinglv/

数据爬取

  • F12:查看网页源代码

经过定位发现这里面分了许多类,每一个分类对应一个图片组,点开图片链接后,进入里面,发现有许多头像。


分析源代码:


每一张图片都有一个超链接:


首先我们要爬取每一分类的链接,之后再对每一个分类下的图片下载下来。

可以看到,每个分类的url都在 <a href=" ">

所以这里我们首先需要正则提取出所有分类的url

<a href="(.*?)" class="img"

代码如下:

# 爬取我要个性网中情侣头像
import requests
import re# 获取情侣头像分类链接
def getCategory(url):# 获取请求对象resp = requests.get(url)# 设置编码resp.encoding = resp.apparent_encoding# 打印访问请求状态码200print(resp.status_code)# 跨行匹配所有字符# pattern = re.compile('class="txList ".*?href="(.*?)"', re.S)pattern = re.compile('<a href="(.*?)" class="img"')# print(resp.text)# 打印分类的链接result = re.findall(pattern, resp.text)print('分类链接数:', len(result))print('分类链接:')print(result)return result

成功提取到所有分类的url


接下来就可以下载每一个分类中的所有图片了。

分析源代码

每一个分类下的图片链接都在 <img class="lazy" src=">里面。


所以这里我们首先需要正则提取出所有图片的url。

<img class=“lazy” src="(.*?)"

def saveImg(links):num = 1for link in links:# 获取请求对象resp = requests.get('https://www.woyaogexing.com' + link)# 设置编码resp.encoding = resp.apparent_encoding# 打印访问请求状态码200print(resp.status_code)# 跨行匹配所有字符pattern = re.compile('<img class="lazy" src="(.*?)"')# print(resp.text)# 打印分类的链接imgLinks = re.findall(pattern, resp.text)print(imgLinks)

成功提取到所有图片的url。

接下来就可以下载所有图片了。

# 遍历图片的url
for imgLink in imgLinks:resp = requests.get('https:' + imgLink)with open('./headportrait/%d.jpg'%num, 'wb') as fin:fin.write(resp.content)  # 写入图片二进制print('正在下载第%d图片'%num + "http:" + imgLink)num += 1

结果展示如下:


至此,图片已经成功下载至本地。代码提升和优化的空间还很大。我只是实现了基本的功能。

完整代码

# 爬取我要个性网中情侣头像
import requests
import re# https://www.woyaogexing.com/touxiang/qinglv/2021/1142219.html# 获取情侣头像分类链接
def getCategory(url):# 获取请求对象resp = requests.get(url)# 设置编码resp.encoding = resp.apparent_encoding# 打印访问请求状态码200print(resp.status_code)# 跨行匹配所有字符# pattern = re.compile('class="txList ".*?href="(.*?)"', re.S)pattern = re.compile('<a href="(.*?)" class="img"')# print(resp.text)# 打印分类的链接result = re.findall(pattern, resp.text)print('分类链接数:', len(result))print('分类链接:')print(result)return resultdef saveImg(links):num = 1for link in links:# 获取请求对象resp = requests.get('https://www.woyaogexing.com' + link)# 设置编码resp.encoding = resp.apparent_encoding# 打印访问请求状态码200print(resp.status_code)# 跨行匹配所有字符pattern = re.compile('<img class="lazy" src="(.*?)"')# print(resp.text)# 打印分类的链接imgLinks = re.findall(pattern, resp.text)print(imgLinks)# 遍历图片的urlfor imgLink in imgLinks:resp = requests.get('https:' + imgLink)with open('./headportrait/%d.jpg'%num, 'wb') as fin:fin.write(resp.content)  # 写入图片二进制print('正在下载第%d图片'%num + "http:" + imgLink)num += 1if __name__ == "__main__":# 访问地址url = 'https://www.woyaogexing.com/touxiang/qinglv/'# 获取情侣头像各个分类的链接links = getCategory(url)saveImg(links)

后序

该内容还有很多,接下来可以遍历所有页,数据量很大,大约2w张图片,经过分析发现每一页的url类似,所以直接for循环重复以上代码就可以。

url/touxiang/qinglv/index_num.html

注意:一定要拼接url,在前面加上’https://www.woyaogexing.com’

正则表达式:请参考 程序员必学的《正则表达式》

爬虫基础:请参考 小白必学的爬虫基础

Thanks♪(・ω・)ノ

感谢女朋友这多年的陪伴与支持!LOVE YL (* ̄︶ ̄)

加油!

努力!

感谢!

女朋友想换情侣头像了,怎么办?【2万张图片满足要求】相关推荐

  1. 情人节快到了,我部署了一套情侣头像小程序,并过审了

    最近在学习如何部署微信小程序,目的就是像拥有一个属于自己的小程序 之前做的是一个微信公众号,靠自然的流量虽然也开通了流量主,但是每天收益就是那0.0几的,所有寻思看能不能做一个小程序出来.不会写小程序 ...

  2. python画情侣头像

    最近想换头像了,网上找了一些,基本都运行不出来,所以自己动手来个简单一点的.话不多说,直接上代码: import jieba import wordcloud from imageio import ...

  3. 情人节挨打礼物-情侣头像自动生成

    情侣头像自动生成 又到了一年一度的情人节了,这次献上一个情侣头像自动生成的工具,效果见上图(示例是本人qq头像,可以改为情侣的头像or照片) 代码本身在去年七夕的时候就完成了,之后因为忙于学习和外包工 ...

  4. 电脑账户头像怎么删掉_情侣头像丨情侣头像一男一女背影

    情侣头像丨情侣头像一男一女背影 提示:点击放大图片,长按保存 人生三境界:一是独上高楼,望尽天涯路";二是衣带渐宽终无悔,为伊消得多少人看似没心没肺,却掩饰了心中的悲伤.我只拥有,一个人的寂 ...

  5. foobar2000隐藏桌面悬浮窗头像_多多情侣头像大全app-多多情侣头像大全软件v1.0.1...

    多多情侣头像大全app,为小伙伴提供更有意思的情侣头像,涵盖更多的头像资源,提供卡通,萌宠,真人,明星等等头像资源,带给小伙伴更多的情头选择,帮助小伙伴选出最喜欢的情侣,满足小伙伴对于情头的需求,一键 ...

  6. 工作几年,想换技术方向,怎么办?

    工作几年,想换技术方向? 有读者在微信问我:轩辕,我想从C++换成Java方向,有什么建议吗? 看到这个问题,我还是有资格回答的,我也经历过和他一样的疑惑,想着可能不少人工作几年后都想过更换技术方向的 ...

  7. 如何换wordpress头像

    爱马仕同学潜心研究后精心制作的wordpress教程,以下内容转自爱马仕同学的博客^^ _________________________________ 上周末lisa同学反应我博客自动生成的个人头 ...

  8. Nature大调查显示 :全球1/4博士生想换导师

    点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文来源:新智元.Nature "如果可以再来一次,我将重 ...

  9. 选错导师误终身?Nature大调查显示 :全球1/4博士生想换导师

    来源:新智元.Nature 转载自:科研大匠 "如果可以再来一次,我将重新选择导师." 在Nature的一次对全球6300名博士的调查中,有将近四分之一博士生这么说. Nature ...

最新文章

  1. 用太极拳讲分布式理论,真舒服!
  2. 27个人类基因被重新命名,只因Excel总把它们自动纠正成日期
  3. IIS+PHP+MYSQL安装配置
  4. 解决the NTP socket is in use, exiting问题
  5. 盘点三个JavaScript案例——实现限时秒杀、定时跳转、改变盒子大小
  6. 服务网格:Istio和AWS App Mesh
  7. 数字化经营支付3.0有哪些盈利机会
  8. 天天说常识推理,究竟常识是什么?
  9. 数学原来这么有趣,一组图唤醒你的思维!
  10. C语言-01基础语法
  11. 检测PYthon标识符合法性脚本
  12. Java中对数组的操作
  13. 解决Maven:com.oracle:ojdbc7-12.1.0.2.jar在pom文件中无法下载问题
  14. PHP微信H5支付Demo
  15. 华为U2000网管研究实录 (4) - 运行分析(系统监控客户端)
  16. 一个测试经理/测试主管/测试总监的工作总结
  17. 【HTML粒子流特效】(效果 + 代码)
  18. carsim2020.0的教程在“将HDWDZDPPV6 替换成 复制的HostID”这个步骤总是安装失败,解决这个问题,成功安装carsim2020.0的经验
  19. 计算机工程研究生美国专业排名,美国计算机研究生专业排名
  20. 15、PIC32系列-输入捕捉ICAP

热门文章

  1. layui框架实现table某一列的合并+冻结(合并列+fixed冻结二者发生冲突)
  2. Precision和Recall​
  3. AutoCAD.net Jig实例1 动态标尺
  4. 如何提高小程序搜索排名
  5. Linux :ldd 命令的介绍与使用
  6. 剑指offer35——数组中的逆数对
  7. 架设dnscrypt和unbound
  8. 信息学奥赛一本通:1083:计算星期几
  9. multiprocessing.freeze_support()
  10. python高级函数六剑客