Python爬虫学习笔记
前言
适当爬取怡情,过度爬取…
**
爬取到的东西不要商用!爬取到的东西不要商用!爬取到的东西不要商用!
1.准备工具
获取Python request第三方库
方法一:同时按win+r,输入cmd,打开cmd后输入:‘pip install requests’进行安装
注意:下载速度慢/下载失败大多数是因为没有设置镜像,镜像的设置如下。
一、打开cmd,输入:
sudo pip install -i https://pypi.tuna.tsinghua.edu.cn/simple #这里是用的清华镜像,下方有其他镜像可以使用
清华:https://pypi.tuna.tsinghua.edu.cn/simple
阿里云:http://mirrors.aliyun.com/pypi/simple/
中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/
华中理工大学:http://pypi.hustunique.com/
山东理工大学:http://pypi.sdutlinux.org/
豆瓣:http://pypi.douban.com/simple/
2.获取反反爬虫要用的header信息
这里用某个小破站做例子
如果你会,这一块请跳过
如果你懒得整,那么可以用下方所示的头文件(最好用自己的)
User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36
注意,头文件信息就是你访问网站时,你向网站发送的自身信息(不敏感),这个信息一般不会因为网站不同而变化,所以无论是从哪个网站获取的,都通用。
先
然后
接着(如果在这一步遇到显示为空,按Ctrl+R进行刷新)
最后
头文件获取成功,接下来开始了解编写爬虫的必要库
3.库的使用
1.re正则库是一个很强大的第三方库,在此只需要学会re库的一个方法就可以了,详见:https://blog.youkuaiyun.com/qq_43639438/article/details/107735340
re.findall(pattern, string, flags=0) #搜索字符串,并以列表形式返回
在使用前需要获取所用链接所在的网页元素
元素获取如下:
对这个元素进行如下操作(re.findall用法讲解)
Reruests = requests.get('http://www.huitu.com/photo/show/20200110/135852472070.html') #马上就讲requests.get方法
html = Requests.text #访问并以文本形式接受返回
url = re.findall('<img class="m-img" alt=".*?" title=".*?" src="(.*?)" />',html) #.*?表示不需要匹配的元素内容、(.*?)表示要获取的内容,并将链接赋给url
#对比元素用 <img class="m-img" alt="猫咪" title="猫咪-汇图网 www.huitu.com" src="http://pic136.huitu.com/res/20200110/2257244_20200110135852472070_1.jpg" />
2.requests库的使用
同上,对于基础来说,只需要了解此库一个方法的使用
对网址进行访问:
requests.get() #括号里填写要访问的链接,此方法主要模拟浏览器对链接的访问
替换头文件(反反爬虫用)示例:
'''请求网站'''
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36'
} #获取到的头文件
Requests = requests.get('http://www.huitu.com/photo/show/20200110/135852472070.html',headers=headers) #改变头文件
明白上述两个方法的使用后,就开始撸码吧!
4.开始编写
注意看注释
正常编写(修复文字乱码看下面,这里只包含反反爬虫机制)
import requests #调用刚才下载的requests库
import re #调用re正则表达库(一般Python本身会自带,如果没有,可以用pip下载)
import time #做慈善
import os #创建分类用
'''请求网站'''
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36'
}
#反反爬虫机制,替换头文件(获取方法按上上文所述即可)
Requests = requests.get('http://www.huitu.com/photo/show/20200110/135852472070.html',headers=headers)
#可以改成你要抓取的网页,后面是反反爬虫
html = Requests.text
'''解析网址'''
dir_ml = re.findall('<a class="picSpecTxt" title="(.*?)" href=".*?" target="_blank">',html)[0] #解析标题,为文件夹命名做准备
if not os.path.exists(dir_ml): #‘使用os检测文件夹是否存在’如果当前目录不存在,则创建
os.mkdir(dir_ml) #‘使用os创建文件夹’用解析到的名字为文件夹命名
url = re.findall('<img class="m-img" alt=".*?" title=".*?" src="(.*?)" />',html) #解析图片的下载链接
print('反馈网址:' + str(url)) #给个反馈
'''保存图片'''
for urls in url:
time.sleep(1) #延缓程序1秒钟,做慈善
Requests = requests.get(urls,headers=headers) #
name = urls.split('/')[-1]
with open(dir_ml + '/' +name,'wb') as f:
f.write(Requests.content) #以二进制保存(适用于图片音频),text文字
f.close() #程序结束,关闭文件
修复文字乱码(加到请求网站的下一行):
如果还乱码,那么请将‘gdk’改为‘utf-8’
requests.content.decode('gbk')
示例:
'''请求网站'''
headers = {
'User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36'
}
#反反爬虫机制,替换头文件(获取方法按上文所述即可)
Requests = requests.get('http://www.huitu.com/photo/show/20200110/135852472070.html',headers=headers)
requests.content.decode('gbk') #改变编码格式,解决乱码
html = Requests.text
5.运行
目标图片
成功下载图片