python爬虫之爬取百度图片
#
#author:wuhao
#
#爬取指定页码的图片,如果需要爬取某一类的所有图片,整体框架不变,但需要另作分析
# 可能写的有点乱,因为这是我py写的第一个爬虫程序
思路理一下:适用于所有爬虫,高级点的无非就是在我 以下所说的上面增加了点功能 ,比如代理 、 多线程、 死亡重连 等
思路:
本质上来讲爬虫就是 获取网页 然后解析网页 获取出自己需要的数据 然后对数据进行保存
1.需要解决的就是找到存储 你所需资源的网页 url 【满足一定规律】,因为你不可能没爬去一张网页 手动输一次。
2.找到了url, 你所需要做的就是 以 get | 或 post 的方式获取网页资源,至于 get | post 怎么用,如果你不用框架的话【我建议不要用,因为框架也都是基于 urllib 实现的】,我推荐你去官网上看一下 urllib urllib2 模块,里面的API有详细的使用说明。
3.如果第二步搞定了,说明你已经能够获取网页资源了,那么你所需要的就是解析出资源了。 我一般是用 beautifulsoup 库 和 regex 搭配使用 , beautifulsoup 是需要额外安装的,他功能很强大,可以很快速的解析网页结构。
4.第三步解决的话,你要做的就是存储数据了,因为你爬数据,爬数据,如果不保存也没什么用。 import urllib.request
import urllib.parse
import re
import os
#添加header,其中Referer是必须的,否则会返回403错误,User-Agent是必须的,这样才可以伪装成浏览器进行访问
header=\
{
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36',
"referer":"https://image.baidu.com"
}
#由于百度图片获取的方式是采用ajax,所以你从正常的url链接只能提取到一个页面显示的图片,也就是前30张(还是前60张)
#具体的分析是:你下拉页面滚动条,分析XHR的变化,就可以找到所需要的Json数据,比如说这个就是分析后找的Json数据
https://image.baidu.com/search/acjson?tn=resultjson_com&ipn=rj&ct=201326592&is=&fp=result&queryWord=%E5%BE%AE%E8%B7%9D%E6%91%84%E5%BD%B1&cl=2&lm=-1&ie=utf-8&oe=utf-8&adpicid=&st=-1&z=&ic=0&word=%E5%BE%AE%E8%B7%9D%E6%91%84%E5%BD%B1&s=&se=&tab=&width=&height=&face=0&istype=2&qc=&nc=1&fr=&pn=240&rn=30&gsm=b4&1492507141415= #而这个链接中的的 rn 参数指的是一页包含的图片数量,最多60。 pn 指得是第多少张 word 指的是搜索的关键字,其它的一些参数是无关紧要的, 当然你需要把其转码
"https://image.baidu.com/search/acjson?tn=resultjson_com&ipn=rj&ct=201326592&is=&fp=result&queryWord={word}&cl=2&lm=-1&ie=utf-8&oe=utf-8&adpicid=&st=-1&z=&ic=0&word={word}&s=&se=&tab=&width=&height=&face=0&istype=2&qc=&nc=1&fr=&cg=girl&pn={pageNum}&rn=30&gsm=1e00000000001e&1490169411926="
#keyword=input("请输入搜索关键字:")
keyword='美女'
#转换编码格式
keyword=urllib.parse.quote(keyword,"utf-8")
#n作为一个flag,用于条件判断
n=0
#j作为写入图片的识别标志,默认从第0张开始,每写入一张j就+1
j=0
#
error=0
#获取前3000张图片
while(n<30*100):
n+=30
#url链接
url1=url.format(word=keyword,pageNum=str(n)) #获取请求
rep=urllib.request.Request(url1,headers=header)
#打开网页
rep=urllib.request.urlopen(rep)
#读取网页数据
try:
html=rep.read().decode("utf-8")
except:
print("something wrong!")
error=1
print("-------------now page ="+str(n))
if(error==1): continue
#正则匹配,你需要的资源都是在 像这样的里面("thumbURL":"https://ss1.bdstatic.com/70cFvXSh_Q1YnxGkpoWK1HF6hhy/it/u=3734503404,179583637&fm=23&gp=0.jpg")
p=re.compile("thumbURL.*?\.jpg")
#获取正则匹配结果,返回的是一个list
s=p.findall(html)
#如果不路径存在,创建路径,最后的图片保存在此路径下
if os.path.isdir("f:\\myproject\\MyCrawlPic\\美女")!=True:
os.makedirs(r"f:\\myproject\\MyCrawlPic\\美女")
with open("testPic1.txt","w") as f:
for i in s:
#获取图片的url
i=i.replace("thumbURL\":\"","")
#在IDE上显示,打印的结果
print(i)
#保存图片的URL链接,当然你大可不必多此一举
f.write(i)
f.write("\n")
#进行写入图片
urllib.request.urlretrieve(i,"f:\\myproject\\MyCrawlPic\\美女\\pic{num}.jpg".format(num=j))
j+=1
python爬虫之爬取百度图片的更多相关文章
- 百度图片爬虫-python版-如何爬取百度图片?
上一篇我写了如何爬取百度网盘的爬虫,在这里还是重温一下,把链接附上: http://www.cnblogs.com/huangxie/p/5473273.html 这一篇我想写写如何爬取百度图片的爬虫 ...
- python爬虫-爬取百度图片
python爬虫-爬取百度图片(转) #!/usr/bin/python# coding=utf-8# 作者 :Y0010026# 创建时间 :2018/12/16 16:16# 文件 :spider ...
- Python 爬虫实例(1)—— 爬取百度图片
爬取百度图片 在Python 2.7上运行 #!/usr/bin/env python # -*- coding: utf-8 -*- # @Author: loveNight import jso ...
- python 3 爬取百度图片
python 3 爬取百度图片 学习了:https://blog.csdn.net/X_JS612/article/details/78149627
- [Python爬虫] Selenium爬取新浪微博客户端用户信息、热点话题及评论 (上)
转载自:http://blog.csdn.net/eastmount/article/details/51231852 一. 文章介绍 源码下载地址:http://download.csdn.net/ ...
- Python爬虫之爬取站内所有图片
title date tags layut Python爬虫之爬取站内所有图片 2018-10-07 Python post 目标是 http://www.5442.com/meinv/ 如需在非li ...
- Python爬虫之爬取淘女郎照片示例详解
这篇文章主要介绍了Python爬虫之爬取淘女郎照片示例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 本篇目标 抓取淘宝MM ...
- Python爬虫之爬取慕课网课程评分
BS是什么? BeautifulSoup是一个基于标签的文本解析工具.可以根据标签提取想要的内容,很适合处理html和xml这类语言文本.如果你希望了解更多关于BS的介绍和用法,请看Beautiful ...
- from appium import webdriver 使用python爬虫,批量爬取抖音app视频(requests+Fiddler+appium)
使用python爬虫,批量爬取抖音app视频(requests+Fiddler+appium) - 北平吴彦祖 - 博客园 https://www.cnblogs.com/stevenshushu/p ...
随机推荐
- 1001.A+B Format (20)的解题
关于A+B的正确打开方式! 解题思路 gitub 也是研究了很久才学会了本地上传,中间还遇到一些问题,多亏学长的教程跟搜索引擎的帮忙解决啦! 我想还是了解题目的意思是解题的最关键,通过了查词软件跟自身 ...
- 团队作业8——Beta 阶段冲刺4th day
团队作业8--Beta 阶段冲刺4rd day 一.当天站立式会议 二.每个人的工作 (1)昨天已完成的工作(具体在表格中) 添加了支付功能,并且对支付功能进行了测试 (2)今天计划完成的工作(具 ...
- 【Beta】Daily Scrum Meeting——Day5
站立式会议照片 1.本次会议为第五次Meeting会议: 2.本次会议在早上9:35,在陆大2楼机房召开,本次会议为25分钟讨论今天要完成的任务以及接下来的任务安排. 燃尽图 每个人的工作分配 成 员 ...
- 201521123010 《Java程序设计》第7周学习总结
1. 本周学习总结 以你喜欢的方式(思维导图或其他)归纳总结集合相关内容. 参考资料: XMind 2. 书面作业 ①ArrayList代码分析 1.1 解释ArrayList的contains源代码 ...
- 201521123022 《Java程序设计》 第十三周学习总结
1. 本周学习总结 2. 书面作业 Q1. 网络基础 Q1.1 比较ping www.baidu.com与ping cec.jmu.edu.cn,分析返回结果有何不同?为什么会有这样的不同? 前者IP ...
- Java课程设计 学生基本信息管理系统 团队博客
学生基本信息管理系统团队博客 项目git地址 https://git.oschina.net/Java_goddess/kechengsheji 项目git提交记录截图 项目功能架构图与主要功能流程图 ...
- 201521123101 《Java程序设计》第14周学习总结
1. 本周学习总结 2. 书面作业 1. MySQL数据库基本操作 建立数据库,将自己的姓名.学号作为一条记录插入.(截图,需出现自己的学号.姓名) 在自己建立的数据库上执行常见SQL语句(截图) 2 ...
- 控制结构(6) 最近最少使用(LRU)
// 上一篇:必经之地(using) // 下一篇:程序计数器(PC) 基于语言提供的基本控制结构,更好地组织和表达程序,需要良好的控制结构. There are only two hard thin ...
- 通过SDK和API获取阿里云RDS的监控数据
阿里云的RDS自带的监控系统获取数据不怎么直观,想要通过API获取数据通过zabbix显示,因为网上资料缺乏和其他一些原因,获取API签名很困难,但使用阿里云的SDK可以完美避开获取签名的步骤. 阿里 ...
- JSP第三篇【JavaBean的介绍、JSP的行为--JavaBean】
什么是javaBean JavaBean就是一个普通的java类,也称之为简单java对象–POJO(Plain Ordinary Java Object),是Java程序设计中一种设计模式,是一种基 ...