爬虫学习笔记(四)——糗百爬虫遇到的反爬
爬虫学习笔记(三)——利用JSON爬取豆瓣热映的使用
爬虫学习笔记(二):requests基础用法之爬取各类主流网站2
爬虫学习笔记(一):requests基础用法之爬取各类主流网站1
提示:以下是本篇文章正文内容,下面案例可供参考
示例:爬取图片的最简化操作如下:
1.导入request库,导入RE库;
2.利用request.get()获取URL的内容;利用re进行页面匹配
3.截取其中图片真实的URL地址;
4.利用写入方法将图片以二进制的格式进行储存
with open (url,wb) as f:
f.write()
由于我们要爬取的地址www.vmgirls.com,是个私人性质的网站,经过之前大多数爬虫的摧残已经不堪重负了,页面进行了一定程度的反扒设置。
例如:直接在Chrome浏览器页面,右键无法被打开。解决办法是在爬取地址前面加上:view-source:https://www.vmgirls.com/xxxxxx.html
如果没有添加headers,会被直接认为这是爬虫程序,参照之前的教程添加headers里面的内容,'User-Agent’或者‘cookies’,完善信息,减少被反爬的几率。
做到以上几点后,代码内容如下图所示:
import requests
import re
headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.87 Safari/537.36 SE 2.X MetaSr 1.0'
}
httpurl = 'https://www.vmgirls.com/15643.html'
response = requests.get(httpurl,headers = headers)
html = response.text
urls = re.findall('',html)
te(response.content)print(urls)
for url in urls:
with open("girl.jpeg",'wb') as f:
f.write(response.content)
得到的数据如上图所示,并在程序所在位置生成一个girl.jpeg的图片,显示下载的有数据但暂时无法打开,这个我们最后解决。
从以上程序内容,就是下载静态页面图片的爬虫程序的精简方式了,原理解释完毕。
dir_name = re.findall('(.*?)
',html)[-1]
if not os.path.exists(dir_name): #如果文件夹不存在,创建文件夹
os.mkdir(dir_name)
2.增加正在下载和下载完毕的提示信息。通过切片功能,将url地址进行切片,获取图片的原名。
file_name = url.split('/')[-1] #分割后取URL最后一部分内容
print(file_name+"正在下载")
虽然我们能获取图片的下载,但是这里网站还是给我们挖了一个坑,这些jpeg图片内容是正确的,但是却无法正常打开,下载的网页地址可以在浏览器打开图片。
后来经过笔者多次尝试发现,这是网站留下的坑,处理办法是将图片后缀改为GIF就好了,这里不太清楚原因是什么。好了,我们总不能手动修改吧,这样太LOW了,增加批量后缀修改功能,这样代码就完成了,一起欣赏小姐姐吧。
好了,今天就到这里了,今天介绍了图片爬取的基本套路。以及如何趟过学习路上的各种坑,下次见。哦,差点忘了,源代码奉上。
# -*- coding: utf-8 -*-
import os
import time
import requests
# 导入re正则
import re
# 改变自己身份
headers = { 'cookie': "__gads=ID=fc9334cf4a808919-229cda78e8c50071:T=1612417691:RT=1612417691:S=ALNI_MYEC3_vOddOSOwXHSdgBI7YsHKOOg; _ga=GA1.2.1102378475.1612417691; _gid=GA1.2.1324825227.1612417694",
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.87 Safari/537.36 SE 2.X MetaSr 1.0'
}
# 请求网页
#网页地址自己可以修改
httpurl = 'https://www.vmgirls.com/15643.html'
response = requests.get(httpurl,headers = headers)
#print(response.request.headers)
#print(response.text)
html = response.text
# 解析网页
# view-source:https://www.vmgirls.com/15159.html
# 链接前加view-source查看网页源代码
dir_name = re.findall('(.*?)
',html)[-1]
if not os.path.exists(dir_name): #如果文件夹不存在,创建文件夹
os.mkdir(dir_name)
# 正则查找
urls = re.findall('',html)
print(urls)
# 保存图片
for url in urls:
time.sleep(2)
# 图片名字
file_name = url.split('/')[-1] #分割后取URL最后一部分内容
responses = requests.get("https:"+url,headers = headers)
print(file_name+"正在下载")
with open(dir_name + '/' +file_name ,'wb') as f:
f.write(responses.content)
f.close()
print('下载完毕')
rootdir = "C:/USERS/USER/PycharmProjects/01_python基础/"+dir_name
#这个是程序所在位置地址,每个人不一样,需要自己修改
files=os.listdir(rootdir)
for filename in files:
portion=os.path.splitext(filename) #portion为名称和后缀分离后的列表 #os.path.splitext()将文件名和扩展名分开
if portion[1]==".jpeg": #如果为tiff则更改名字
newname=portion[0]+".gif" #要改的新后缀 #改好的新名字
print(filename) #打印出要更改的文件名
os.chdir(rootdir) #修改工作路径
os.rename(filename,newname) #在工作路径下对文件名重新命名
#内容非本人原创,代码修修补补
#发布时间:2021-02-05
#作者:咚宝学编程