[爬虫]1.1.1网络爬虫的概念
网络爬虫,也称为网页爬虫或者网页蜘蛛,是一种用来自动浏览互联网的网络机器人。它们会按照特定的规则,从网页上获取信息,然后将这些信息保存下来。网络爬虫的名字来源于它们的工作方式,它们就像是在网络上爬行的蜘蛛,通过链接从一个网页爬到另一个网页。
工作原理
网络爬虫的基本工作原理是按照一定的规则,自动地抓取网络信息。大体上,它的工作过程可以分为以下几步:
-
初始URL: 爬虫开始工作时,我们需要给它一些初始的URL。这些URL就像是爬虫的"种子",提供了爬虫的起点。
-
发送请求和获取响应: 爬虫会向这些URL发送请求,然后得到网页的响应。这个过程就像是你在浏览器中输入一个网址,然后浏览器显示出网页的过程。
-
解析网页: 爬虫会解析得到的网页内容,从中提取出我们需要的信息,比如新闻的标题和内容、商品的价格和图片等。
-
提取链接: 在解析网页的过程中,爬虫还会提取出网页中的链接,然后将这些链接添加到待爬取的URL队列中。
-
循环爬取: 爬虫会重复上述过程,不断地从URL队列中取出URL,发送请求,获取响应,解析网页,提取信息和链接,直到URL队列为空,或者达到了我们设置的爬取深度。
这就是网络爬虫的基本工作原理。它们就像是在网络上爬行的蜘蛛,通过链接从一个网页爬到另一个网页。
网络爬虫的分类
按照工作方式,网络爬虫可以分为两类:一类是通用网络爬虫,一类是聚焦爬虫。
-
通用网络爬虫: 通用网络爬虫主要是搜索引擎使用的爬虫,比如Google的Googlebot,它们的目标是尽可能地爬取整个网络。
-
聚焦爬虫: 聚焦爬虫则是针对特定的任务或者网站进行爬取,比如我们自己编写的爬虫,通常就是聚焦爬虫。
网络爬虫的应用
网络爬虫有很多应用,比如搜索引擎的网页索引,新闻的自动聚合,商品价格的监控等。在数据科学和机器学习领域,网络爬虫也经常被用来收集训练数据。
网络爬虫的例子
这是一个简单的Python网络爬虫的例子,它使用requests库发送请求,使用BeautifulSoup库解析HTML,从Python官方网站上爬取所有PEP的标题。
import requests
from bs4 import BeautifulSoup
url = "https://www.python.org/dev/peps/"
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')
pep_list = soup.find('table', {"class": "list-table"}).findAll('tr')
for pep in pep_list[1:]:
number = pep.find('td', {"class": "pep-number"}).text
title = pep.find('td', {"class": "pep-title"}).text
print(f'{number}: {title}')
请求和响应
在网络爬虫的工作过程中,发送请求和获取响应是非常重要的一步。简单来说,请求就是爬虫向服务器发送一个消息,告诉服务器它想要获取什么信息,响应则是服务器返回的消息,包含了爬虫请求的信息。
HTTP协议是互联网上应用最广泛的一种网络协议,所有的WWW文件都必须遵守这个标准。一个HTTP请求包含三个部分:请求行、请求头部和请求数据。同样,HTTP响应也包含三个部分:状态行、消息报头和响应正文。
在Python中,我们常用的发送HTTP请求的库有requests和urllib,其中requests更为简单易用。
这是一个使用requests发送GET请求的例子:
import requests
response = requests.get('https://www.python.org')
print(response.status_code) # 打印状态码
print(response.text) # 打印响应内容
网页解析
解析网页是网络爬虫的另一个重要步骤。网页大部分是用HTML语言编写的,HTML是一种标记语言,它的内容由一系列的标签组成。我们可以通过解析HTML,提取出我们需要的信息。
Python中常用的HTML解析库有BeautifulSoup和pyquery等,其中BeautifulSoup更为常用。
这是一个使用BeautifulSoup解析HTML的例子:
from bs4 import BeautifulSoup
html = """
<html>
<head>
<title>Test Page</title>
</head>
<body>
<h1>Welcome to the Test Page</h1>
<p>This is a <a href="https://www.example.com">link</a>.</p>
</body>
</html>
"""
soup = BeautifulSoup(html, 'html.parser')
title = soup.find('title').text
h1 = soup.find('h1').text
link = soup.find('a')['href']
print(f'Title: {title}')
print(f'H1: {h1}')
print(f'Link: {link}')
链接提取
链接提取是网络爬虫的一项基本技能。通过提取网页中的链接,网络爬虫可以从一个页面跳转到另一个页面,就像蜘蛛通过丝线在网上移动一样。
在HTML中,链接通常由<a>
标签表示,链接的URL通常写在href
属性中。我们可以用BeautifulSoup提取出所有的<a>
标签,然后读取它们的href
属性,就可以得到所有的链接。
这是一个提取链接的例子:
from bs4 import BeautifulSoup
html = """
<html>
<body>
<a href="https://www.example.com">Link 1</a>
<a href="https://www.example2.com">Link 2</a>
<a href="https://www.example3.com">Link 3</a>
</body>
</html>
"""
soup = BeautifulSoup(html, 'html.parser')
links = soup.findAll('a')
for link in links:
print(link['href'])
这就是网络爬虫的基本概念,它们# 网络爬虫的概念
网络爬虫,也称为网页爬虫或者网页蜘蛛,是一种用来自动浏览互联网的网络机器人。它们会按照特定的规则,从网页上获取信息,然后将这些信息保存下来。网络爬虫的名字来源于它们的工作方式,它们就像是在网络上爬行的蜘蛛,通过链接从一个网页爬到另一个网页。
推荐阅读: