python根据用户需求输入想爬取的内容及页数爬取图片方法详解


Posted in Python onAugust 03, 2020

本次小编向大家介绍的是根据用户的需求输入想爬取的内容及页数。

主要步骤:

1.提示用户输入爬取的内容及页码。
2.根据用户输入,获取网址列表。
3.模拟浏览器向服务器发送请求,获取响应。
4.利用xpath方法找到图片的标签。
5.保存数据。
代码用面向过程的形式编写的。

关键字:requests库,xpath,面向过程

现在就来讲解代码书写的过程:

1.导入模块

import parsel # 该模块主要用来将请求后的字符串格式解析成re,xpath,css进行内容的匹配
import requests # 爬虫主要的包
from urllib.request import urlretrieve # 本文用来下载图片
import os # 标准库,本文用来新建文件夹

每个模块的作用都已经备注了。

2.提示用户输入内容和页数

if not os.path.exists("王一博图片"):
  os.mkdir("王一博图片") # 判断有没有该文件夹,如果没有就创建改文件夹
k = input("请输入你想搜索的关键字:")
num = int(input("请输入你想搜索的页数:"))

3.准备好url和header

header = {"user-agent":
       "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Mobile Safari/537.36"
     }
base_url = "https://www.duitang.com/search/?kw=" + k + "&type=feed#!s-p"
title_url = []
n = 0

user-agent是服务器识别浏览器的重要参数,我们就用这个来蒙骗服务器,user-agent在浏览器里可以找到

python根据用户需求输入想爬取的内容及页数爬取图片方法详解

那么现在我们就关注右边

python根据用户需求输入想爬取的内容及页数爬取图片方法详解

这样header就找到了,注意要以字典的形式

4.发送请求、

for i in range(num):
  title_url = base_url + str(i)
  respons = requests.get(title_url, headers=header).text
  html = parsel.Selector(respons) # 解析数据 -- parsel 转化为Selector对象,Selector对象具有xpath的方法,能够对转化的数据进行处理
  pic_url = html.xpath('//div[@class="mbpho"]/a/img/@src').extract()

一切准备就绪后,就可以发送请求了。request.get.text返回的是网页的源代码,然后将源代码转换为Selector对象,再通过xpath的方法找到图片的网址。

python根据用户需求输入想爬取的内容及页数爬取图片方法详解

xpath的方法可以参考:https://zhuanlan.zhihu.com/p/29436838

5.保存数据

获取图片的图片的链接后,我们就可以保存了。

for url in pic_url:
    n = n + 1
    file_path = "王一博图片" + '/' + str(n)+".jpg"
    urlretrieve(url, file_path) # 下载图片,具体的用法可以去搜索下,很简单的
    print("第%d张图片下载成功" % n)

注意:这里的for循环是在上面的循环里嵌套的。
最后来看看全部的代码吧!

import parsel # 该模块主要用来将请求后的字符串格式解析成re,xpath,css进行内容的匹配
import requests
from urllib.request import urlretrieve # 本文用来下载图片
import os # 标准库,本文用来新建文件夹

if not os.path.exists("王一博图片"):
  os.mkdir("王一博图片") # 判断有没有该文件夹,如果没有就创建改文件夹
k = input("请输入你想搜索的关键字:")
num = int(input("请输入你想搜索的页数:"))
header = {"user-agent":
       "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Mobile Safari/537.36"
     }
base_url = "https://www.duitang.com/search/?kw=" + k + "&type=feed#!s-p"
title_url = []
n = 0
for i in range(num):
  title_url = base_url + str(i)
  respons = requests.get(title_url, headers=header).text
  html = parsel.Selector(respons)
  pic_url = html.xpath('//div[@class="mbpho"]/a/img/@src').extract()
  # print(pic_url)
  for url in pic_url:
    n = n + 1
    file_path = "王一博图片" + '/' + str(n)+".jpg"
    urlretrieve(url, file_path) # 下载图片,具体的用法可以去搜索下,很简单的
    print("第%d张图片下载成功" % n)

来看看运行的结果,以搜索王一博,搜索5页为例。

python根据用户需求输入想爬取的内容及页数爬取图片方法详解

然后你就发信多了一个王一博的文件夹了,点开就可以看见王一博的帅照了。

python根据用户需求输入想爬取的内容及页数爬取图片方法详解

到此这篇关于python根据用户需求输入想爬取的内容及页数爬取图片方法详解的文章就介绍到这了,更多相关python爬取图片方法内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python函数缺省值与引用学习笔记分享
Feb 10 Python
Python装饰器的函数式编程详解
Feb 27 Python
python冒泡排序简单实现方法
Jul 09 Python
python中不能连接超时的问题及解决方法
Jun 10 Python
基于python实现简单日历
Jul 28 Python
便捷提取python导入包的属性方法
Oct 15 Python
python使用matplotlib绘制雷达图
Oct 18 Python
python add_argument()用法解析
Jan 29 Python
Python单元测试模块doctest的具体使用
Feb 10 Python
python tkinter之 复选、文本、下拉的实现
Mar 04 Python
python 基于opencv操作摄像头
Dec 24 Python
教你用Python写一个植物大战僵尸小游戏
Apr 25 Python
Python 如何调试程序崩溃错误
Aug 03 #Python
Python 捕获代码中所有异常的方法
Aug 03 #Python
Python连接mysql数据库及简单增删改查操作示例代码
Aug 03 #Python
Python pip使用超时问题解决方案
Aug 03 #Python
python时间序列数据转为timestamp格式的方法
Aug 03 #Python
python3 中使用urllib问题以及urllib详解
Aug 03 #Python
Python txt文件常用读写操作代码实例
Aug 03 #Python
You might like
第一个无线电台是由谁发明的
2021/03/01 无线电
中国站长站 For Dede4.0 采集规则
2007/05/27 PHP
php 什么是PEAR?(第三篇)
2009/03/19 PHP
简单的php+mysql聊天室实现方法(附源码)
2016/01/05 PHP
详解php中反射的应用
2016/03/15 PHP
php5.6.x到php7.0.x特性小结
2019/08/17 PHP
Thinkphp框架使用list_to_tree 实现无限级分类列出所有节点示例
2020/04/04 PHP
php变量与字符串的增删改查操作示例
2020/05/07 PHP
BOOM vs RR BO5 第四场 2.14
2021/03/10 DOTA
jQuery制作仿腾讯web qq用户体验桌面
2013/08/20 Javascript
Angular2 多级注入器详解及实例
2016/10/30 Javascript
怎样判断jQuery当前元素是隐藏还是显示
2016/11/23 Javascript
JavaScript之map reduce_动力节点Java学院整理
2017/06/29 Javascript
vue+vuecli+webpack中使用mockjs模拟后端数据的示例
2017/10/24 Javascript
详解Angular-ui-BootStrap组件的解释以及使用
2018/07/13 Javascript
JavaScript使用localStorage存储数据
2019/09/25 Javascript
[46:43]DOTA2上海特级锦标赛D组小组赛#1 EG VS COL第三局
2016/02/28 DOTA
gearman的安装启动及python API使用实例
2014/07/08 Python
编写Python脚本把sqlAlchemy对象转换成dict的教程
2015/05/29 Python
分享一个可以生成各种进制格式IP的小工具实例代码
2017/07/28 Python
python基于http下载视频或音频
2018/06/20 Python
详解10个可以快速用Python进行数据分析的小技巧
2019/06/24 Python
浅谈matplotlib 绘制梯度下降求解过程
2020/07/12 Python
阿玛尼美妆俄罗斯官网:Giorgio Armani Beauty RU
2020/07/19 全球购物
药学专业大学生自荐信
2013/09/28 职场文书
高中自我鉴定范文
2013/11/03 职场文书
后勤岗位职责
2013/11/26 职场文书
学雷锋宣传标语
2014/06/25 职场文书
工作年限证明模板
2014/11/01 职场文书
2014幼儿园教师个人工作总结
2014/11/08 职场文书
2015年银行客户经理工作总结
2015/04/01 职场文书
财务总监岗位职责范本
2015/04/03 职场文书
销售内勤岗位职责范本
2015/04/13 职场文书
被告代理词范文
2015/05/25 职场文书
幼儿园园长六一致辞
2015/07/31 职场文书
vue3中的组件间通信
2021/03/31 Vue.js