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 os def url_ls(url):
#获取页面所有套图链接
html=requests.get(url)
html.encoding=html.apparent_encoding
url_ls=re.findall("https\:\/\/m\.meitulu\.com\/item\/\w+",html.text)
return url_ls def tup(url):
#获取图片链接及套图名
url_ls=[]
num=1
name=""
while True:
if num==1:
url1=url+".html"
num+=1
print(name)
else:
url1=url+"_{}.html".format(num)
num+=1
print(url1)
a=requests.get(url1)
if a.status_code==404:
break
a.encoding=a.apparent_encoding
my_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,name def 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.content
with 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=0
for j in tup_ls:
n+=1
num='{:0>4}'.format(n)
w(j,name,num)

美图录爬虫(requests模块,re模块)的更多相关文章

  1. 爬虫--requests模块学习

    requests模块 - 基于如下5点展开requests模块的学习 什么是requests模块 requests模块是python中原生的基于网络请求的模块,其主要作用是用来模拟浏览器发起请求.功能 ...

  2. Python开发基础-Day15正则表达式爬虫应用,configparser模块和subprocess模块

    正则表达式爬虫应用(校花网) import requests import re import json #定义函数返回网页的字符串信息 def getPage_str(url): page_stri ...

  3. python基础之正则表达式爬虫应用,configparser模块和subprocess模块

    正则表达式爬虫应用(校花网) 1 import requests 2 import re 3 import json 4 #定义函数返回网页的字符串信息 5 def getPage_str(url): ...

  4. Python基础之模块:5、 第三方模块 requests模块 openpyxl模块

    目录 一.第三方模块的下载与使用 1.什么是第三方模块 2.如何安装第三方模块 方式一:pip工具 方式二:pycharm中下载 3.注意事项 1.报错并有警告信息 2.报错,提示关键字 3.报错,无 ...

  5. 【爬虫入门手记03】爬虫解析利器beautifulSoup模块的基本应用

    [爬虫入门手记03]爬虫解析利器beautifulSoup模块的基本应用 1.引言 网络爬虫最终的目的就是过滤选取网络信息,因此最重要的就是解析器了,其性能的优劣直接决定这网络爬虫的速度和效率.Bea ...

  6. Python爬虫与数据分析之模块:内置模块、开源模块、自定义模块

    专栏目录: Python爬虫与数据分析之python教学视频.python源码分享,python Python爬虫与数据分析之基础教程:Python的语法.字典.元组.列表 Python爬虫与数据分析 ...

  7. 【网络爬虫入门03】爬虫解析利器beautifulSoup模块的基本应用

    [网络爬虫入门03]爬虫解析利器beautifulSoup模块的基本应用   1.引言 网络爬虫最终的目的就是过滤选取网络信息,因此最重要的就是解析器了,其性能的优劣直接决定这网络爬虫的速度和效率.B ...

  8. 爬虫(三):urllib模块

    1. urllib模块 1.1 urllib简介 urllib 是 Python3 中自带的 HTTP 请求库,无需复杂的安装过程即可正常使用,十分适合爬虫入门 urllib 中包含四个模块,分别是: ...

  9. python day 8: re模块补充,导入模块,hashlib模块,字符串格式化,模块知识拾遗,requests模块初识

    目录 python day 8 1. re模块补充 2. import模块导入 3. os模块 4. hashlib模块 5. 字符串格式:百分号法与format方法 6. 模块知识拾遗 7. req ...

随机推荐

  1. Apple Watch Series 6 无法使用截屏问题和解决方案

    Apple Watch Series 6 无法使用截屏问题和解决方案 shit Apple,无法使用截屏, TMD 根本就不存在 相机胶卷 ! 不好使 解决方案 ??? https://support ...

  2. 高级数据结构之 BloomFilter

    高级数据结构之 BloomFilter 布隆过滤器 https://en.wikipedia.org/wiki/Bloom_filter A Bloom filter is a space-effic ...

  3. what's the print number means after called the setTimeout function in Chrome console?

    what's the print number means after called the setTimeout function in Chrome console? javascript fun ...

  4. CI / CD in Action

    CI / CD in Action Continuous Integration (CI) & Continuous Delivery (CD) https://github.com/mark ...

  5. RT-Thread学习笔记3-线程间通信 & 定时器

    目录 1. 事件集的使用 1.1 事件集控制块 1.2 事件集操作 2. 邮箱的使用 2.1 邮箱控制块 2.2 邮箱的操作 3. 消息队列 3.1 消息队列控制块 3.2 消息队列的操作 4. 软件 ...

  6. 人物传记STEPHEN LITAN:去中心化存储是Web3.0生态重要组成

    近期,NGK.IO的开发团队首席技术官STEPHEN LITAN分享了自己对去中心化储存的观点,以下为分享内容. 目前的存储方式主要是集中式存储,随着数据规模和复杂度的迅速增加,集中存储的数据对于系统 ...

  7. 呼叫河马——搭建在NGK公链上的去中心化智能合约DAPP

    基于区块链技术发展的DAPP是一种分布式应用生态系统.目前最受DAPP欢迎的区块链有以太坊.EOS.波场等公链. 但由于当前 EOS资源模型的局限性,使得其使用成本较高.尽管 EOS的DPOS共识机制 ...

  8. [转]Linux下scp的用法

    http://blog.51cto.com/yaksayoo/175719 scp就是secure copy,一个在linux下用来进行远程拷贝文件的命令.有时我们需要获得远程服务器上的某个文件,该服 ...

  9. Asp.Net Core学习笔记:(二)视图、模型、持久化、文件、错误处理、日志

    TagHelper 入门 优点:根据参数自动生成,不需要手写超链接,类似Django模板里面的url命令. 在ViewImport中添加TagHelper @addTagHelper *,Micros ...

  10. Linux的启动过程及init进程

    Linux下有三个特殊进程: idle进程(pid=0)idle进程其前身是系统创建的第一个进程,0号进程,也唯一一个没有通过fork()或者kernel_thread产生的进程,由系统自动创建,运行 ...