引言
在我们当下的生活情境里, 总会碰到大量的数据信息, 这些内容包含个人想看的图片资源、影视作品的评分标准, 还有各种商品进行对比的详细内容, 要是选择人工方式进行汇总收集, 那就得耗费掉不少的时间和精力, 在此种情形之下网络爬虫技术便在信息采集与后续分析的工作层面彰显出来了自身的实用价值所在, 并且接下来这部分文字会对有关爬虫的基础常识做一个粗略的介绍说明。
一、对于初学者来说, 了解爬虫的基础工具是入门的一个重要步骤, 我们需要把核心库和基本原理作为重点来学习。
对于爬虫开发来讲, 抓包这项工作是必不可少的, 它在地位上类似于网络安全和网络工程中的相关操作。但是, 我们并不像做网络安全那样使用BP工具, 也不像做网络工程那样进行专门的配置。
在通常的情况下, 大家只要利用浏览器自身自带的抓包功能就足够了, 这一点建议大家去尝试一下或者是微软提供的方案或者微软的开发者工具。接下来, 本文将对工具的具体使用方法作介绍。首要步骤是按下键盘上的F12键以打开开发者模式。
就图中圈出来的部分来看, 我们主要在用的东西是这些东西, 这些, 还有那些。
很多人可能都会误以为这个界面里面展示的就是源代码, 事实上的情况并不是这样的, 所以如果你是真的想要去查看源代码这种操作的话, 正确的方法应当是使用点击鼠标的右键按键并且选择检查代码这个选项, 具体的呈现样式请参照下面所展示的图片。
有人就会产生这样的疑问, 说这两者之间的区别在什么地方呢? 我们可以拿参加考试这个行为来举一个具体的例子。查阅源代码这一举动, 大体上类似于老师手里拿着的那些试卷的标准答案版本;而学霸自己写出来的那些东西, 往往不是那么简洁规范。
但是, 这难道就意味着它们没有价值了吗? 这种想法是完全不对的。在一个纯代码构成的页面环境之中, 想要定位到自己所想要的特定标签是非常费劲的。在某些情况下, 我们就必须要借助一些手段去找到我们需要的标签。
它是一个用于调试工作的工具平台, 在爬虫开发里边它的用途并不是特别大, 如果后面文章有涉及到相关内容的部分话, 到时候会再去专门提一提。
那个文件夹是用来存放源代码的, 在里面可以查看相应的文件内容。
则是我们用的最多的, 要注意打开这些选项, 当刷新后会出现所有传输的数据包, 有时候我们想要的便在这里。
1.2 基础库
先把对应的库给引进来。这也就是说。
from urllib.request import urlopen咱们就先把百度当成例子, 具体该怎么做? 就是在库里面去引用相关的方法。
url = "http://www.baidu.com" # 定义要访问的urlresp = urlopen(url) # 打开url
#print(resp.read().decode("utf-8")) # 读取响应内容并解码为utf-8,此时拿到的是源代码
with open("mybaidu.html",mode="w",encoding="utf-8") as f: # 打开文件,指定编码为utf-8
f.write(resp.read().decode("utf-8")) # 写入文件
首先我们得给出一个url, 去告诉爬虫咱们要弄哪儿的东西, 所以在这时候, 就要靠用那个()方法来完成拿取url的任务。
resp.read()取出来的东西其实是字节, 所以我们必须得通过解码这个步骤去弄明白源代码是什么人话看得懂的东西。
可是呢, 每个网站的解码规则都不一样的, 不是通用的那个标准, 所以我们就需要动手去查一查他们到底是用个啥子码源, 方法是用CTRL+F这个工具去搜一下那个“编码”的英文单词, 经过查找可以发现百度那边用的是UTF-8, 具体的画面如图所示。
图一所展示的是, 在完全没有使用解码技术的情况之下, 所呈现出来的效果是什么样子的, 而图二所展示的, 则是已经启用了解码功能之后的那种效果。
到了此时, 我们并没有将它给完成保存这一操作。因此。为了达成将其进行保存的目标。我们便使用了某一个函数。而这个函数的名字是 with open() as。
至于文件的读取工作还有写入操作, 在未来的时间段里面, 大家都应当去习惯性地采用那个名为with open的代码语句来进行处理。
with open("filename.txt",'r') as f:content = f.read(f) #文件的读操作
里面的参数意思是对文件的类型进行设定, 将其设置为txt这种格式, 接着以只读的模式把文件给打开。
with open("data.txt","w") as f:content = f.write("hello world") #文件的写操作
在这里面, 保存文件类型的这个意思被指定为是txt格式, 然后采用只用于写入这样的方式把文件给打开。
所以的话, 就是针对我们这种想要进行保存操作的源代码这一情况, 那么是需要去使用上面提到的那种语句来处理一下的。
with open("mybaidu.html",mode="w",encoding="utf-8") as f:f.write(resp.read().decode("utf-8"))
这份代码做的事情就是把用utf-8这个格式去解那个url页面它的内容, 然后写进到一个叫.html的文件里面去把它存好。
但是需要注意的是, 库是自带的, 并不好用, 所以引入新的库。该库需要下载, 在终端输入pip进行下载。下载完成后便可正常使用。
import requestsurl =
resp = requests.get(url) #发送get请求体
resp.encoding = "utf-8"
print(resp.txt) #拿到页面源代码
1.第三部分讲的是POST以及GET请求, 具体是小节一千三百一十一的内容, 这个内容是关于POST请求的。
以百度翻译为例
import requestsurl = #对于post无论url有多长都需要拿过来
data ={
"kw":input("请输入一个单词:")
}
rep = requests.post(url,data=data) #data为post请求的数据包参数
print(rep.text) #拿到的是文本字符串
print(rep.json()['data']) #此时拿到的直接是json数据
当大家看到这块地方的时候, 也许会琢磨一下, 这个究竟是在哪里出现的呢?大家可以这样做, 进到百度翻译的这个地方去, 然后把给输进去就行了, 不过最后一步的时候,记得一定要把输入法切到中文的状态再去输入。
通过对网络抓包操作的实施与完成, 我们有能力并且在随后可以获取到form data部分中所包含的相对应的那些相关数据, 关于这一情况的具体呈现以及详细的内容展示, 请看下面所展示出来的这张相关图片。
1.3.2 GET请求
我们可以拿豆瓣举例子。
import requests#get请求只需要提取问号前面的url
url =
data = {
"type":"13",
"interval_id":"100:90",
"action":"",
"start" :"0",
"limit":"20"
}
header = {
"user-agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/139.0.0.0 Safari/537.36"
}
resp = requests.get(url,params=data,headers=headers) #处理get请求数据包为params
print(resp.text)
print(resp.request.url) #查看url
关于这个data部分, 在GET这个请求的情况之下? 它对应的是Query这个概念。而在POST请求的时候, 它是在同一个位置进行放置的。这里需要注意的一点就是, 如果是遇到GET请求的情况下, 那么我们只需要去提取问号前面那部分的URL内容就行了。千万不要把这个整个的URL都一起拿过来进行处理。
二、网页解析的具体操作, 其实就是从HTML代码当中把相关的数据给提取出来。这里我们先聊聊2.1章节关于HTML和CSS的事情, 具体是2.1.1小节里介绍的HTML基础语法部分的内容。
标题