Python

爬虫

最近学正则表达式,刚好知道这个网站美图录,就做了个爬虫拿来练练手,说一说遇到的问题

一 404问题

问题:

由于图片显示页面是分页的,每一页展示5张图片,为了方便没有每次去获取下一页链接,而是使用了拼接字符串的形式,本以为遇到不存在的页面会抛出异常,测试了下,结果当网站遇到404时会直接跳转推荐页,于是requests还能正常返回数据

解决方法:

requests提供了一个req_object.status_code参数,用于返回页面状态码,判断一下这个参数为404就停止生成链接

二 文件写入问题

问题:

写入图片文件,图片无法正常显示

解决方法:

requests提供了img.content参数,用于将接受到的信息转换为二进制,然后在文件写入时,写入模式为"wb",以二进制方式写入

三反爬策略

问题:

爬取图片时发现图片会返回403(禁止访问资源),原因是网站做了防盗链处理,非本站访问图片都会返回403

解决方法:

在获取图片时添加headers请求头,在请求头中添加

'Referer':'https://m.meitulu.com/item/1.html'
将Referer 值设置为本站的图片展示页链接,这样服务器会认为请求来自本站页面,返回信息就会正常

美图录爬虫

# -*- coding: utf-8 -*-
import requests
import re
import osdef url_ls(url):#获取页面所有套图链接html=requests.get(url)html.encoding=html.apparent_encodingurl_ls=re.findall("https\:\/\/m\.meitulu\.com\/item\/\w+",html.text)return url_lsdef tup(url):#获取图片链接及套图名url_ls=[]num=1name=""while True:if num==1:url1=url+".html"num+=1print(name)else:url1=url+"_{}.html".format(num)num+=1print(url1)a=requests.get(url1)if a.status_code==404:breaka.encoding=a.apparent_encodingmy_url=re.findall("https\:\/\/mtl\.ttsqgs\.com\/images\/img\/\w+\/\w+\.jpg",a.text)if name=="":na=re.findall("\<h1\>[\w\W]+\<\/h1\>",a.text)nam=re.sub("\<h1\>","",na[0])name=re.sub("\<\/h1\>","",nam)print(name)for i in my_url:if "/0.jpg" not in i:url_ls.append(i)return url_ls,namedef w(url,name,num):headers={
'Host':'mtl.ttsqgs.com',
'Connection':'keep-alive',
'User-Agent':'Mozilla/5.0 (Linux; Android 7.1.2; M6 Note) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.105 Mobile Safari/537.36',
'Accept':'image/webp,image/apng,image/*,*/*;q=0.8',
'Referer':'https://m.meitulu.com/item/1.html',
'Accept-Encoding':'gzip, deflate, br',
'Accept-Language':'zh-CN,zh;q=0.9'
}name=re.sub('[\/:*?"<>|]',"_",name)print(name)print("正在下载{}".format(name))img=requests.get(url,headers=headers)os.system("clear")imga=img.contentwith open("./{}/{}.jpg".format(name,num),"wb") as f:print("正在写入{}".format(num))f.write(imga)f.close()url=input("url")
urllist=url_ls(url)
for i in set(urllist):tup_ls,name=tup(i)os.makedirs("./{}".format(name))n=0for j in tup_ls:n+=1num='{:0>4}'.format(n)w(j,name,num)

转载于:https://www.cnblogs.com/WXGC-yang/p/10522299.html

美图录爬虫(requests模块,re模块)相关推荐

  1. Python爬虫---requests模块的基本使用

    Python爬虫-requests模块的基本使用 基础 什么是爬虫? 就是通过编写程序模拟浏览器上网,然后让其去互联网上爬取数据的过程. 爬虫的分类 通用爬虫 抓取互联网中的一整张页面数据 聚焦爬虫 ...

  2. 使用requests和re模块爬取i春秋论坛的精品贴(小爬虫)

    前言 下一篇是使用requests和re模块爬取某个学习站点的所有用户头像. 最近在刷i春秋论坛的帖子,发现论坛首页每天都会推送一些精品文章,但是有时候好几天也没有更新首页的推送,总不能每天都去刷新吧 ...

  3. Python爬虫辅助利器PyQuery模块的安装使用攻略

    这篇文章主要介绍了Python爬虫辅助利器PyQuery模块的安装使用攻略,PyQuery可以方便地用来解析HTML内容,使其成为众多爬虫程序开发者的大爱,需要的朋友可以参考下 Windows下的安装 ...

  4. 【爬虫】使用request模块进行爬虫

    本系列为自己学习爬虫的相关笔记,如有误,欢迎大家指正 引入 在python实现的网络爬虫中,用于网络请求发送的模块有两种,第一种为urllib模块,第二种为requests模块.urllib模块是一种 ...

  5. 一木.溪桥学爬虫-03:请求模块urllib、 urllib.request、urllib.parse.urlencode、urllib.parse.quote(str)、.unquote()

    一木.溪桥 在Logic Education跟Jerry学爬虫 07期:Python 爬虫 一木.溪桥学爬虫-03:请求模块urllib. urllib.request.urllib.parse.ur ...

  6. python jsonpath库_Python爬虫(十六)_JSON模块与JsonPath

    本篇将介绍使用,更多内容请参考:Python学习指南 数据提取之JSON与JsonPATH JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它是的人们很容易 ...

  7. python爬虫需要调用什么模块_python爬虫需要调用什么模块

    python 爬虫常用模块: Python标准库--urllib模块 功能:打开URL和http协议之类 注:python 3.x中urllib库和urilib2库合并成了urllib库. 其中url ...

  8. python爬虫 -- 正则表达式 与 Re模块的介绍

    Regular Expression,正则表达式,一种使用表达式的方式对字符串进行匹配的语法规则. 爬虫中我们抓取到的网页源代码本质上就是一个超长的字符串,想从里面提取内容.用正则再合适不过了. 正则 ...

  9. 从入门到入土:Python爬虫学习|Selenium自动化模块学习|简单入门|轻松上手|自动操作浏览器进行处理|chrome|PART01

    此博客仅用于记录个人学习进度,学识浅薄,若有错误观点欢迎评论区指出.欢迎各位前来交流.(部分材料来源网络,若有侵权,立即删除) 本人博客所有文章纯属学习之用,不涉及商业利益.不合适引用,自当删除! 若 ...

  10. Python爬虫实战,pytesseract模块,Python实现拉勾网岗位数据可视化

    前言 利用Python实现BOOS直聘&拉勾网岗位数据可视化.废话不多说. 让我们愉快地开始吧~ 开发工具 Python版本:3.6.4 相关模块: requests模块 pyspider模块 ...

最新文章

  1. 深入Lock锁底层原理实现,手写一个可重入锁
  2. python android自动化元素定位_linux下Appium+Python移动应用自动化测试实战---3.手把手教你定位元素编写测试用例...
  3. 手动排除fbiytty和vcxlcph病毒的干扰
  4. TensorBoard不是内部或外部指令也不是可运行的程序(已解决)
  5. Faiss优化:针对OMP_NUM_THREADS环境变量设置的测试验证
  6. 使用std::cout不能输出显示
  7. mysql group函数_MySQL函数:group_concat()函数
  8. 关系数据库基础:函数依赖知识笔记
  9. 使用阿里云智能翻译接口案例——CSDN博客
  10. 在新版CSDN博客添加友情链接
  11. Oracle plsql 打包
  12. bool函数_PHP变量类型测试函数的使用:一、is_bool的用法
  13. 如何应对缓存穿透和缓存雪崩问题?极其重要
  14. Fresco图片库研读分析
  15. LINUX环境下安装MySQL数据库
  16. 【PTA】【C语言】球体的表面积及体积
  17. 基于easyX实现俄罗斯方块
  18. 3gqq幻想西游〓宠物、副本、攻略、攻城、极品怪〓
  19. TApplicaiton.ProcessMessages不能在非主线程使用
  20. 单目标跟踪——个人笔记

热门文章

  1. P、NP、NPC、NP-Hard
  2. 计算机取消补考,2005级《计算机文化基础》补考通知
  3. Kms 激活服务器搭建
  4. python实现等量随机分组
  5. uni-app,H5抽奖
  6. windows系统安装指南-微PE版
  7. 惠普找不到远程服务器,找不到网络打印机是怎么回事?
  8. 计算机二级office易错知识点,重要!!!计算机二级office易错点汇总
  9. Equinox 和 OSGI 介绍
  10. 测试报告包含哪些内容?