Python爬虫基础教程,详细讲解(含爬取文字为乱码解决办法、反爬虫机制解决办法)

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.csdn.net/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.运行

目标图片
在这里插入图片描述

在这里插入图片描述
成功下载图片

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值