爬虫速成(二):数据获取

战略地位极其重要

通常来说,我们获取数据使我们的第一步,也是我们最重要的一步,因为有些数据藏得很深,或者是有反爬机制,相比之下数据清洗和数据存储操作比较简单。

反爬就是我们访问浏览器地址,不能获取到网页上的内容,他可能是使用ajax传输的,也可能是使用js加密的,也可能是判断请求头的,多种多样,我们写爬虫最重要的一步就是找到真正的资源地址!!!

开启requests之路

我们新手学习建议使用python的requests库去访问地址获取数据,不因为别的,就因为他很简单,下面是官方文档给的介绍。。。

在这里插入图片描述

文档地址:https://requests.readthedocs.io/zh_CN/latest/user/quickstart.html

在这里我们可以学习基础用法,大家其实可以直接跳转到这个界面去学习了,因为他说的很棒啊!

我下面会用一个简单的例子介绍一些常用的用法。


一些参数解释

我们在寻找数据的时候,通常会用浏览器的F12开发者工具,在此对一些参数进行简单介绍。

在这里插入图片描述

按下F12之后,右侧会弹出框框,我们选择Network,当我们发起请求的时候,服务器传回来的东西都会在这里显示,通常情况下,Nmae下的第一个就是我们请求的地址

  • Elements:heml的网页的结构
  • Network:显示网络传输的过程部分
  • Name:发起的请求
  • Headers:发起请求的基本信息
  • Headers - Request URL:问号前面的我们请求的服务器,后面是我们请求的参数
  • Headers - Request Method:请求的方式,分为get请求与post请求,通常为get请求。根据请求不同,使用的方法也不同(只有一个函数要改)
  • Headers -Status Code:200代表请求成功,404代表请求失败。(301、302、400、403、500大家自己有兴趣可以看看)
  • Headers - Request Headers:请求头信息,有的服务器会判断你的请求头进行反爬。经过我几次试验,我发现,有反爬的网站大部分写了这些也没用。。。
  • Headers - Query String Parameters:请求的参数
  • Preview:将服务器返回到的资源进行展示
  • Response:显示服务器返回的资源

开始获取资源

众所周知,李清照的诗词婉转凄美,意蕴悠长,帅帅龙是她忠实的粉丝,我们今天就以获取李清照诗集为例,贯穿我们爬虫速成的始终

获取数据必须要有个意识!观察url的变化

我们来到古诗词网https://www.gushiwen.org/ ,哇,这个网站真是简约而不简单,朴素而有韵味,现代气息中透露着远古的深沉,真的棒!

在这里插入图片描述

按下F12观察数据传输,搜索李清照,进入诗词界面,url变化啦!!!

在这里插入图片描述

https://so.gushiwen.cn/search.aspx?value=%E6%9D%8E%E6%B8%85%E7%85%A7

大家可以看到,网站上的url是value=李清照,但是复制下来后就变成了value=%E6%9D%8E%E6%B8%85%E7%85%A7,这是因为url有自己的编码方式,汉字会转化为固定的编码,大家可以使用urllib的parse类的urlencode方法尝试将文字进行编码


判断是否有反爬机制

我们打开F12,重新进入古诗词,搜索李清照,找到发起的请求,如下

在这里插入图片描述

发现地址为https://so.gushiwen.cn/search.aspx?value=%E6%9D%8E%E6%B8%85%E7%85%A7,请求方式为get。我们先使用爬虫请求一下这个页面,看看有没有反爬,是不是能直接获取资源,代码如下

import requests
url='https://so.gushiwen.cn/search.aspx?value=%E6%9D%8E%E6%B8%85%E7%85%A7'
response = requests.get(url)
print(response)  # 查看请求状态,200就是成功。
response = response.text
print(response)

我们搜一下网页上的信息,看看有没有

在这里插入图片描述

通过使用键盘和鼠标,我们发现,可以直接访问到网页资源!这证明这个网站没有反爬机制 ,兄弟萌,看懂掌声!!!

到这里,我们的数据获取就成功了哦,是不是很简单?几行代码搞定!!!


获取全部诗集资源

前面已经说了,获取数据必须要有个意识!观察url的变化 ,我们滑到最下面,点击下一页,观察第二页、第三页、第四页网址规律。

# 首页
https://so.gushiwen.cn/search.aspx?value=%E6%9D%8E%E6%B8%85%E7%85%A7
# 第二页
https://so.gushiwen.cn/search.aspx?type=author&page=2&value=%e6%9d%8e%e6%b8%85%e7%85%a7
# 第三页
https://so.gushiwen.cn/search.aspx?type=author&page=3&value=%e6%9d%8e%e6%b8%85%e7%85%a7

兄弟萌!规律是不是很简单???

我们发现只有page发生变化了(大多数都是类似的),我们这时候可以暗自窃喜了,我们已经发现了不该发现的东西。

剩下的是不是只要做一个循环,每次都page+=1就好了呀!!!


这时候我们就思考,第一页是不是也是这种规律呢? 我们点上一页回去

https://so.gushiwen.cn/search.aspx?type=author&page=1&value=%e6%9d%8e%e6%b8%85%e7%85%a7

发现,也符合这个规律哦,就类似网页映射(没听过就当我没说)


Webdriver:最强有力的依赖

网站通常会有反爬机制,如果你不想解决繁琐的加密方法,就直接使用webdriver就好了,他不是模拟浏览器了,他就是一个浏览器,只不过是被我们写代码操纵的。

注意事项:

  • 作为一个爬虫程序员,webdriver是我们最后的倔强,如果不能解决,请准备好红包来找我❤️

  • webdriver分为两个东东,浏览器和浏览器的driver,这个需要配套的,需要安装对应版本的浏览器和driver,建议使用Chrom,F12方便还有插件

    为了省事,大家可以直接下载我下载好的资源点击下载

  • 我们需要安装selenium库,因为webdriver在selenium里

保存二进制资源

注意:response是content形式

import requests
# 资源地址
url='https://m10.music.126.net/20201025120553/67c59f3b38316e2fdca3f8b39737024c/yyaac/obj/wonDkMOGw6XDiTHCmMOi/1918458169/baa9/638e/4385/bfc440b9ca05c987fc7d4178814325ef.m4a'
# 发起请求
response = requests.get(url).content
print(response)
# 数据写入文件
with open("漫步人生路.mp3",'wb') as fp:
    fp.write(response)

使用Webdriver获取网页资源

from selenium import webdriver
from lxml import etree
browser = webdriver.Chrome()
url = "https://so.gushiwen.cn/search.aspx?value=%E6%9D%8E%E6%B8%85%E7%85%A7"

# 开始请求
browser.get(url)

#得到页面源代码
response=browser.page_source   #字符串形式
print(response)

#关闭浏览器
browser.quit()
#关闭chreomedriver进程
browser.close()

Webdriver一些常用方法

在这里呢,我就不多写了,我提一下,大家知道可以这么做就好了,具体实现网上一大堆,要是实在找不到,那就准备好红包找我哦!

  • webdriver的无头模式(不显示页面)
  • 来截图
  • 模拟滑动滚轮
  • 模拟点击元素
  • 输入账号密码
  • 定位标签

唉,怕大家不会使用百度,给一个例子吧:

如何使用webdriver输入账号密码

使用键盘,将这段话填入到百度搜索框,按下回车,找相关介绍!!!


获取到的资源输出出来显示火星文(乱码)

这个其实没啥事,我们只需要在requests里面稍稍修改即可。

response = requests.get(url).content.decode()

实战教程推荐

这个是B站搜索的结果,使用python爬取音乐,可能有的已经过时了,大部分后面都是广告

反爬手段可能会升级,但思维能得到提升。

也可以加视频里的群,大部分群里每天都有小爬虫案例,白嫖挺舒服的,只要不被洗脑就好。。。

https://search.bilibili.com/all?keyword=python%E7%88%AC%E5%8F%96%E9%9F%B3%E4%B9%90&from_source=nav_search_new


反爬的解决手段

信息没在第一个请求中

我们打开priview,使用Ctrl + F进行搜索,看看里面有没有你的资源,如果没有可能是在别的地方。

点一下我们的请求(将鼠标交点从Priview中移出),再按一下Ctrl + F,将我们想要的信息放进去

信息哪都没找到

直接上driver

开始状态200,后来404

可能是资源地址发生改变,或者是你的频率太快啦,ip被封啦。

使用sleep或者使用代理或者休息会再爬

验证码

看看能不能找到json数据,不能的话就直接上webdriver。

打开请求界面后,先sleep几秒钟,给你时间扫码或者输验证码、账号密码等。

其他

准备好红包,联系我!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

笼中小夜莺

嘿嘿嘿,请用金钱尽情地蹂躏我吧

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值