Python爬取图片之家

1、 爬虫实现的思路

1.1、请求图片之家的首页,找到我们要爬取的板块

1.2、请求包含我们要爬取图片的页面

1.3、使用BeautifulSoup、xpath、正则表达式等解析工具,解析出图片的路径

1.4、请求图片的途径(即下载图片)

2、爬虫的实现(Python代码)

针对上面的思路,我们一步一步实现图片爬虫

2.1、请求图片之间的首页,获取要爬取的板块

点开图片之家的首页我们发现一共有八个板块,每一个板块有不同的id,我们将这些id存储起来放在一个列表里,方便后续访问。

def pic_male():url = 'https://www.tupianzj.com/meinv/'# 使用requests模块的get的方法请求网页response = requests.get(url=url, headers=headers)# 对获取到的内容进行编码,使用gb2312进行编码,使用utf-8编码会乱码response.encoding = "gb2312"# 获取HTML页面文本内容,使用字符串存储data = response.text# 从字符串常量解析HTML文档。返回根节点tree = etree.HTML(data)pic_list = ['tag6166a8b4e5bb4a43dc708a3c4c26383e', 'tagece4a5f04199957553b4a8be39952bc7','tag245af89317f0f3aeb7d0c7a37b8bc416', 'tagedc722867ded49f2abb0dcd02f280d57','tag638ab696c93b18632c5c257274827aae', 'tag2e618e33ce4be001221a80b12483ebdc','tag922c19b5321c51a0dc40dde0338921d4', 'tag35acf75bfbf410b548b3b043d09d2c31']for j in pic_list:xpath_list = '//*[@id="' + j + '"]/li/a/@href'url_list = tree.xpath(xpath_list)for i in url_list:first_url = "https://www.tupianzj.com" + iprint(first_url)photo_male(first_url)time.sleep(1.5)

2.2、请求包含我们要爬取图片的页面,进行翻页爬取

去除前面的两个按钮,获取到每一按钮所对应的网页


def photo_male(url):my_url = url[:-11]# print(my_url)response = requests.get(url=url, headers=headers)response.encoding = "gb2312"data = response.texttree = etree.HTML(data)url_list = tree.xpath('//*[@id="container"]/div/div/div[2]/div[2]/div[3]/ul/li/a/@href')# 删除掉无法访问的页面s-url-list:javascript:dPlayPre(); s-url-list:#  s-url-list:210612_2.htmldel (url_list[:2])for i in url_list:# 构造请求图片页面page_url = my_url + i  # https://www.tupianzj.com/meinv/20200910/ + 217273_2.html# print(page_url)page(page_url)

2.3、获取图片的src属性

获取到每一张图片的src属性,以便进行下一步的持久化存储

def page(img_url_01):# 请求图片的页面img_res = requests.get(url=img_url_01, headers=headers)# 使用gb2312进行编码,使用utf-8会乱码img_res.encoding = "gb2312"# 获取页面的文本,存储为字符串img_data = img_res.text# 把字符串解析成HTMLimg_tree = etree.HTML(img_data)# 提取图片侧src属性img_url = img_tree.xpath('//*[@id="bigpicimg"]/@src')for i in img_url:# 从URL中截取到图片的名字img_name = i.split('/')[-1]# print(img_name)print(i)download(i, img_name)

2.4、对图片进行持久化存储

def download(pic_url, name):pic = requests.get(pic_url, headers=headers)my_dir = "D:\FireFoxDownload\SpiderPic/" + namewith open(my_dir, "wb") as f:f.write(pic.content)

2.5、全部代码

# -*- coding:utf-8 -*-
import requests
from lxml import etree
import time
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 ''Safari/537.36 Edg/87.0.664.66',}def pic_male():url = 'https://www.tupianzj.com/meinv/'# 使用requests模块的get的方法请求网页response = requests.get(url=url, headers=headers)# 对获取到的内容进行编码,使用gb2312进行编码,使用utf-8编码会乱码response.encoding = "gb2312"# 获取HTML页面文本内容,使用字符串存储data = response.text# 从字符串常量解析HTML文档。返回根节点tree = etree.HTML(data)# 存放板块的idpic_list = ['tag6166a8b4e5bb4a43dc708a3c4c26383e', 'tagece4a5f04199957553b4a8be39952bc7','tag245af89317f0f3aeb7d0c7a37b8bc416', 'tagedc722867ded49f2abb0dcd02f280d57','tag638ab696c93b18632c5c257274827aae', 'tag2e618e33ce4be001221a80b12483ebdc','tag922c19b5321c51a0dc40dde0338921d4', 'tag35acf75bfbf410b548b3b043d09d2c31']for j in pic_list:# 构造板块,并获取a标签的属性xpath_list = '//*[@id="' + j + '"]/li/a/@href'url_list = tree.xpath(xpath_list)for i in url_list:# 遍历所有的板块first_url = "https://www.tupianzj.com" + iprint(first_url)photo_male(first_url)time.sleep(1.5)# 访问图片的页面,进行翻页爬取
def photo_male(url):my_url = url[:-11]# print(my_url)response = requests.get(url=url, headers=headers)response.encoding = "gb2312"data = response.texttree = etree.HTML(data)url_list = tree.xpath('//*[@id="container"]/div/div/div[2]/div[2]/div[3]/ul/li/a/@href')# 删除掉无法访问的页面s-url-list:javascript:dPlayPre(); s-url-list:#  s-url-list:210612_2.htmldel (url_list[:2])for i in url_list:# 构造请求图片页面page_url = my_url + i  # https://www.tupianzj.com/meinv/20200910/ + 217273_2.html# print(page_url)page(page_url)# 提取图片的src属性
def page(img_url_01):img_res = requests.get(url=img_url_01, headers=headers)img_res.encoding = "gb2312"img_data = img_res.textimg_tree = etree.HTML(img_data)img_url = img_tree.xpath('//*[@id="bigpicimg"]/@src')for i in img_url:img_name = i.split('/')[-1]# print(img_name)print(i)download(i, img_name)# 下载图片
def download(pic_url, name):pic = requests.get(pic_url, headers=headers)my_dir = "D:\FireFoxDownload\SpiderPic/" + namewith open(my_dir, "wb") as f:f.write(pic.content)if __name__ == '__main__':print("正在下载图片...")pic_male()print("下载成功")

3、总结

总的来说,爬虫并不是很难,之前一直写不出爬虫,个人认为有以下几点原因:

​ 1、思路不清晰,不知道这么多页面之间的关系

​ 2、不知道如何提取页面的一些属性

​ 3、python语言的熟练度,包括但不限于数组的操作,切片等

上面就是我学习爬虫遇到的问题,经过不断的学习,慢慢地学会到了如何使用xpth,BeautifulSoup等工具进行页面属性提取。

Python爬取图片之家相关推荐

  1. python爬房源信息_用python爬取链家网的二手房信息

    题外话:这几天用python做题,算是有头有尾地完成了.这两天会抽空把我的思路和方法,还有代码贴出来,供python的初学者参考.我python的实战经历不多,所以代码也是简单易懂的那种.当然过程中还 ...

  2. python爬取图片然后保存在文件夹中

    python爬取图片然后保存在文件夹中 直接上代码: import os import requests import redef getimg(soup,i):print('http:'+ soup ...

  3. python关于二手房的课程论文_基于python爬取链家二手房信息代码示例

    基本环境配置 python 3.6 pycharm requests parsel time 相关模块pip安装即可 确定目标网页数据 哦豁,这个价格..................看到都觉得脑阔 ...

  4. python爬取图片并保存到本地

    Python爬取图片(你懂得) requests与Bs4 这两个模块是本文使用的主要模块,requests可以获取连接,bs4全名BeautifulSoup,是编写python爬虫常用库之一,主要用来 ...

  5. Python爬取图片、视频以及将数据写入excel的方法小摘要

    Python爬取图片.视频以及将数据写入excel的方法小摘要 1.爬取图片 2.爬取视频 3.将获取的数据存入excel 4.备注 1.爬取图片 import requests #导入request ...

  6. python爬取链家网的房屋数据

    python爬取链家网的房屋数据 爬取内容 爬取源网站 爬取内容 爬取思路 爬取的数据 代码 获取房屋url 获取房屋具体信息 爬取内容 爬取源网站 北京二手房 https://bj.lianjia. ...

  7. Python——爬取图片

    大家好,我是@xiaomeng 小孟 您好 欢迎大家阅读今天的文章----Python爬取图片(爬虫) 最近爬虫挺火的,所以我今天也来一个爬虫! 正文: 首先,我们先下载模块,pip install ...

  8. python爬取图片链接标签的src属性值_python爬取图片遇见src乱码: data:image/png;base64...

    python爬取图片遇见src乱码: data:image/png;base64 向爬取自己喜欢的图片,但是在爬取下来的代码当中图片的src会出现乱码的情况:data:image/png;base64 ...

  9. Python爬取图片实例

    网络爬虫又叫网络蜘蛛.网络机器人等名词.网络爬虫就是自动化的去抓取网络数据,可以在网络中获取满足自己需求的相关信息和资料.通过网络爬虫可以获取大量的数据并且集中在一起,然后就可以进行数据的批量分析和处 ...

  10. python爬取图片并写入excel

    目标: 1)python爬取图片并下载到本地文件夹 2)python爬取图片并写入到excel文件 Ⅰ.python程序 # 导入库 import requests import parsel imp ...

最新文章

  1. 传统服务化(SOA)与微服务(Micro Service)的融合之道
  2. c++创建单级目录 多级目录,判断是否存在
  3. jvm垃圾收集器的发展史及回收算法
  4. MySql采用range分区可提升查询效率
  5. Payara Micro在Oracle应用容器云上
  6. BGP路由选择综合实验(华为设备)
  7. 5款好用的开源JS图片裁剪插件(3个jQuery插件,2个AngularJS插件)
  8. IDC:阿里云安全能力和IaaS市场份额双项领先
  9. 高校后勤管理系统java代码_java毕业设计_springboot框架的高校后勤信息管理系统...
  10. 学计算机投影仪定义,一种计算机信息技术教学用投影仪的制作方法
  11. 分享一个强大的网盘搜索平台-猪猪盘
  12. vue多次引用组件,减少每个页面import的方法
  13. oracle stdevp函数,ORACLE 系统函数与SQLSERVER系统函数的区别是什么
  14. 一起来玩U3D之基础物理引擎
  15. 华为智能音响2代鸿蒙,99999元!华为全屋智能方案来了:鸿蒙生态是亮点
  16. PPT文档翻译软件怎么用?如何翻译整篇PPT文档
  17. 如何在Adobe Reader中存储阅读的Session
  18. eBPF(extended Berkeley Packet Filter):Linux系统最具颠覆性的“白盒测试”
  19. Matlab 基于DEM计算坡度
  20. 简单卷、跨区卷、带区卷、镜像卷和 RAID-5 卷

热门文章

  1. 如何制定有效的项目章程?【含项目章程模板】
  2. 高级终端termux下载不了Python_利用termux下载某站受限的番剧
  3. 【windows】--- SQL Server 2008 超详细安装教程
  4. dnf虚拟机安装的解决方法
  5. 计算机视觉教程0-3:为何拍照会有死亡视角?详解相机矩阵与畸变
  6. 微信小程序学习笔记:选项卡
  7. visio一分二的箭头_visio双箭头怎么画? visio2013绘制双箭头直线的教程
  8. Niubility!华为天才少年自制机械臂能给葡萄缝针
  9. biopython安装_python下如何安装biopython
  10. CleanMyPC中文版切换教程(专注于电脑缓存文件清理的工具)