爬虫又叫网页蜘蛛;它是一种根据网络规则和已编写的代码对网页中的数据进行获取的程序和脚本。
我们可以将整个互联网网页理解成一张蛛网,我们沿着这些蛛丝去获取我们需要的数据就是爬虫。
1.发送请求(request)
1.url(网址)
url:URL 是统一资源定位符(Uniform Resource Locator)的缩写,用于标识和定位互联网上的资源。简单的来说,一个视频,一个照片,一个网页文档都可以用唯一的url来确定。
url示例:htpps://baidu.com:8000其中对url进行解析
https:网络协议
baidu.com:主机
8000:端口
2.headers(请求头)
"User-Agent" 是 HTTP 请求头的一部分,它是用来标识客户端(通常是浏览器)的信息。用户代理字符串中包含了有关用户操作系统、浏览器类型和版本等信息。网站可以使用这个信息来适应性地提供内容,但也可能用于识别爬虫程序或自动化工具。
在爬虫场景中,如果你发送请求时没有设置合适的 "User-Agent" 头,网站服务器可能会认为请求来自爬虫,而不是真实的用户浏览器。有些网站可能会采取反爬虫措施,例如封禁爬虫的 IP 地址或限制爬虫访问频率。
为了模拟真实用户的请求,可以设置一个合理的 "User-Agent" 头。这样,你的请求就会更像是由浏览器发起的,减少被识别为爬虫的可能性。
import requests
url = 'https://baidu.com'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
}
response = requests.get(url, headers=headers)
print(response.text)
2.响应返回数据
当你向一个网站发出 HTTP 请求后,服务器会响应并返回相应的数据。响应的数据的格式取决于你请求的资源类型以及服务器的处理方式。以下是一些常见的响应数据类型:
-
HTML 数据: 当你请求一个网页时,服务器通常会返回 HTML 格式的文档。这个 HTML 文档包含了网页的结构、内容和样式。
-
JSON 数据: 很多 Web API 返回的数据是 JSON 格式的,用于传输结构化的数据。例如,请求一个包含用户信息的 API 可能返回一个 JSON 对象。
-
图像、视频和音频等二进制数据: 当你请求图像、视频或音频文件时,服务器会返回对应类型的二进制数据。这些数据通常用于在浏览器中显示图像、播放视频或音频。
在对数据进行返回时,我们会遇到一些响应信息:
1.响应状态
200:响应成功
301:跳转
404:页面不存在
403:无权限
502:服务器出错
3.解析网页(BeautifulSoup)
对于网页数据的解析可以使用python的正则表达式也可以使用xpath、BeautifulSoup、pyquery等解析库来对返回的数据进行解析
对数据解析的作用就是在这一堆乱七八糟的网页源码中,寻找到你需要的文本数据、图片数据等
除了通常的html数据之外,还有的网站采取将数据存储在json数据中,这时候则需要印入json模块。
4.存储数据
对于数据的存储有很多方法,比如将数据存储在数据库中(MySQL,NoSQL)等数据库,也可以将数据存储为csv文件,json文件
常用的简单存储样式为
5.爬取文本实战
先上源码
import requests
from bs4 import BeautifulSoup
ulist = []
header = {'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safari/537.36 Edg/117.0.2045.60'}
req = requests.get(url='https://news.cctv.com/2023/01/19/ARTIeWqyYGLmnz1H92vd1JY4230119.shtml',headers=header)
req.encoding="utf-8"
html = req.text
soup = BeautifulSoup(req.text,features="html.parser")
comtype_item = soup.find_all(name="p")
for comtype in comtype_item:
comtype_for=comtype.text
print(comtype_for)
ulist.append(comtype_for)
with open("case_9.text", "w", encoding='utf-8') as file:
for line in ulist:
file.write(line + '\n')
该代码是对一个新闻网中爬取新闻网内的文本
-
找到需要爬取的网站: 首先,确定你希望从哪个网站获取数据。这可能是一个包含所需信息的新闻网站、社交媒体平台、商品信息等。
-
找到 User-Agent: 设置一个合适的用户代理字符串(User-Agent),模拟真实浏览器的请求,以减少被服务器识别为爬虫的风险。这有助于确保你的请求看起来像是由浏览器发起的,而不是爬虫。
-
确定网站的编码格式: 查看网站的源代码,找到 HTML 文档的
<meta>
标签或其他地方,了解网页使用的编码格式(如UTF-8、ISO-8859-1等)。确保你的爬虫使用相同的编码格式来正确解析网页内容。 -
在网页源码的元素中找到文本存在的标签: 分析网页的 HTML 结构,确定包含你所需信息的标签。这通常需要查看网页的源代码,并使用相关的选择器(例如 XPath 或 CSS 选择器)来定位目标元素。
-
XPath 例子: 如果你想获取所有
<a>
标签中的文本,XPath 可能是"//a/text()"
。 -
CSS 选择器 例子: 如果你想获取所有类名为 "info" 的
<div>
元素中的文本,CSS 选择器可能是".info"
。
在 Python 中,你可能会使用 Beautiful Soup 或其他类似的库来解析 HTML,并使用选择器来提取所需的信息。
-
在这个网页中,每一个p标签对应着不同的文本字段,我们只需要将p标签获取下来就可以获取到文本数据
5.数据保存
# 保存文本数据到文件
with open('output.txt', 'w', encoding='utf-8') as file:
file.write('Your data here')
6.寄语
到这里就讲完了整个简单爬虫的底层原理,简单的来说就是获取网页源码,解析源码,保存数据,还有记得伪装自己的爬虫程序,我们就可以写出简单的爬虫脚本了