使用Python爬取小姐姐图片(beautifulsoup法)

作者:割韭菜的喵酱 时间:2022-05-02 04:01:44 

Python有许多强大的库用于爬虫,如beautifulsoup、requests等,本文将以网站https://www.xiurenji.cc/XiuRen/为例(慎点!!),讲解网络爬取图片的一般步骤。
为什么选择这个网站?其实与网站的内容无关。主要有两项技术层面的原因:①该网站的页面构造较有规律,适合新手对爬虫的技巧加强认识。②该网站没有反爬虫机制,可以放心使用爬虫。

第三方库需求

  •  beautifulsoup

  • requests

 步骤

打开网站,点击不同的页面:
发现其首页是https://www.xiurenji.cc/XiuRen/,而第二页是https://www.xiurenji.cc/XiuRen/index2.html,第三页第四页以此类推。为了爬虫代码的普适性,我们不妨从第二页以后进行构造url。

使用Python爬取小姐姐图片(beautifulsoup法)

选中封面图片,点击检查:

使用Python爬取小姐姐图片(beautifulsoup法)

可以发现,图片的信息,都在'div',class_='dan'里,而链接又在a标签下的href里。据此我们可以写一段代码提取出每一个封面图片的url:


def getFirstPage(page):
 url='https://www.xiurenji.cc/XiuRen/index'+str(page)+'.html'#获得网站每一个首页的网址
 res=requests.get(url)#发送请求
 res.encoding="gbk"#设置编码方式为gbk
 html=res.text
 soup=BeautifulSoup(html,features='lxml')
 lists=soup.find_all('div',class_='dan')#找到储存每一个封面图片的标签值
 urls=[]
 for item in lists:
  url1=item.find('a').get('href')#寻找每一个封面对应的网址
  urls.append('https://www.xiurenji.cc'+url1)#在列表的尾部添加一个元素,达到扩充列表的目的,注意要把网址扩充完整
 return urls#返回该主页每一个封面对应的网址

点击封面图片,打开不同的页面,可以发现,首页的网址是https://www.xiurenji.cc/XiuRen/xxxx.html,而第二页的网址是https://www.xiurenji.cc/XiuRen/xxxx_1.html,第三第四页同理。同样为了普适性,我们从第二页开始爬取。

使用Python爬取小姐姐图片(beautifulsoup法)

右键,点击“检查”:

使用Python爬取小姐姐图片(beautifulsoup法)

可以发现所有的图片信息都储存在'div',class_='img'中,链接、标题分别在img标签中的srcalt中,我们同样也可以将它们提取出来。


def getFirstPage(page):
 url='https://www.xiurenji.cc/XiuRen/index'+str(page)+'.html'#获得网站每一个首页的网址
 res=requests.get(url)#发送请求
 res.encoding="gbk"#设置编码方式为gbk
 html=res.text
 soup=BeautifulSoup(html,features='lxml')
 lists=soup.find_all('div',class_='dan')#找到储存每一个封面图片的标签值
 urls=[]
 for item in lists:
  url1=item.find('a').get('href')#寻找每一个封面对应的网址
  urls.append('https://www.xiurenji.cc'+url1)#在列表的尾部添加一个元素,达到扩充列表的目的,注意要把网址扩充完整
 return urls#返回该主页每一个封面对应的网址

完整代码


import requests
from bs4 import BeautifulSoup

def getFirstPage(page):
 url='https://www.xiurenji.cc/XiuRen/index'+str(page)+'.html'#获得网站每一个首页的网址
 res=requests.get(url)#发送请求
 res.encoding="gbk"#设置编码方式为gbk
 html=res.text
 soup=BeautifulSoup(html,features='lxml')
 lists=soup.find_all('div',class_='dan')#找到储存每一个封面图片的标签值
 urls=[]
 for item in lists:
  url1=item.find('a').get('href')#寻找每一个封面对应的网址
  urls.append('https://www.xiurenji.cc'+url1)#在列表的尾部添加一个元素,达到扩充列表的目的,注意要把网址扩充完整
 return urls#返回该主页每一个封面对应的网址

def download(urls):
for url1 in urls:
 print("prepare to download pictures in "+url1)
 getEveryPage(url1)#下载页面内的图片
 print("all pictures in "+url1+"are downloaded")

def getEveryPage(url1):
total=0#total的作用:对属于每一个封面内的图片一次编号
for n in range (1,11):#每一个封面对应下载10张图,可自行调整
 temp=url1.replace('.html','')
 url2=temp+'_'+str(n)+'.html'#获得每一内部页面的网址
 res=requests.get(url2)
 res.encoding="gbk"
 html=res.text
 soup=BeautifulSoup(html,features='lxml')
 lists1=soup.find_all('div',class_='img')#储存图片的路径

for item in lists1:
  url=item.find('img').get('src')
  title=item.find('img').get('alt')#获取图片及其标题
  picurl='https://www.xiurenji.cc'+url#获取完整的图片标题
  picture=requests.get(picurl).content#下载图片
  address='D:\pythonimages'+'\\'#自定义保存图片的路径
  with open(address+title+str(total)+'.jpg','wb') as file:#保存图片
   print("downloading"+title+str(total))
   total=total+1
   file.write(picture)

if __name__ == "__main__":
page=int(input('input the page you want:'))
urls=getFirstPage(page)
download(urls)

本文仅供学习参考,切勿用作其他用途!

来源:https://blog.csdn.net/m0_51908955/article/details/113767822

标签:Python,爬取小姐姐图片,beautifulsoup
0
投稿

猜你喜欢

  • 日常整理python执行系统命令的常见方法(全)

    2022-07-30 10:39:45
  • 异步任务队列Celery在Django中的使用方法

    2023-08-03 06:26:39
  • Python中的 pass 占位语句

    2023-02-21 20:45:12
  • 轻松掌握MySQL数据库锁机制的相关原理

    2008-12-17 15:23:00
  • python http接口自动化脚本详解

    2022-09-01 05:24:30
  • Python对小数进行除法运算的正确方法示例

    2021-06-19 08:42:18
  • django云端留言板实例详解

    2023-12-13 08:17:59
  • 让Python更加充分的使用Sqlite3

    2022-06-07 05:53:21
  • Python BeautifulReport可视化报告代码实例

    2023-11-12 14:53:13
  • Python搭建Keras CNN模型破解网站验证码的实现

    2023-04-16 15:51:08
  • python构建自定义回调函数详解

    2023-09-07 03:30:45
  • python list多级排序知识点总结

    2023-11-05 03:50:15
  • python文件处理笔记之文本文件

    2022-10-30 22:38:32
  • Python推导式简单示例【列表推导式、字典推导式与集合推导式】

    2021-08-04 08:23:40
  • Python中给List添加元素的4种方法分享

    2023-09-12 04:33:58
  • python基础教程之分支、循环简单用法

    2021-05-30 08:51:48
  • python基于BeautifulSoup实现抓取网页指定内容的方法

    2022-11-29 12:11:48
  • Python turtle库绘制菱形的3种方式小结

    2022-04-10 14:08:19
  • mysql查询一天,查询一周,查询一个月的数据

    2011-01-29 16:22:00
  • 关于字符集和Unicode的相关知识[译]

    2010-03-13 14:17:00
  • asp之家 网络编程 m.aspxhome.com