目录
一、知识图谱概述以及任务概述
(一)知识图谱的定义与起源
知识图谱是一种结构化的知识表示形式,它以图模型的形式描述概念、实体及其之间的关系。知识图谱的起源可以追溯到 2012 年,当时谷歌推出了知识图谱,旨在改善搜索引擎的结果质量,为用户提供更准确、更丰富的信息。
知识图谱由节点和边组成,其中节点表示实体(如人物、地点、事件等),边表示实体之间的关系。例如,在一个知识图谱中,“牛顿” 是一个节点,表示一个人物实体;“万有引力定律” 是另一个节点,表示一个科学理论实体;而 “发现” 则是连接这两个节点的边,表示牛顿发现了万有引力定律。
(二)知识图谱的核心任务
-
实体识别与链接
实体识别是从文本中识别出命名实体(如人名、地名、组织名等)的过程,而实体链接则是将这些实体与知识库中的对应实体进行匹配。例如,在文本 “苹果公司发布了新一代 iPhone” 中,实体识别需要识别出 “苹果公司” 和 “iPhone” 这两个实体,实体链接则需要将它们分别链接到知识库中的对应条目。
-
关系抽取
关系抽取是从文本中识别实体之间关系的任务。例如,在文本 “爱因斯坦出生于德国” 中,关系抽取需要识别出 “爱因斯坦” 和 “德国” 之间的 “出生于” 关系。
-
知识融合
知识融合是从多个来源获取知识,并将其整合到一个统一的知识图谱中的过程。这需要解决不同来源之间的数据格式不一致、实体指代不一致等问题。例如,将来自不同新闻网站、百科全书和学术论文的知识整合到一个知识图谱中。
-
知识推理
知识推理是利用知识图谱中已有的知识,推断出新的知识的过程。这可以通过规则推理、路径推理等方法实现。例如,如果知识图谱中存在 “张三是李四的父亲” 和 “李四是王五的父亲” 这两条知识,通过推理可以得出 “张三是王五的祖父” 这一新知识。
二、爬虫常用模块入门
(一)Python 中的 Requests 库
Requests 是一个 Python HTTP 库,用于发送 HTTP 请求并获取网页内容。它的语法简单,功能强大,是 Web 爬虫开发中的常用工具。
安装与基本用法
pip install requests
import requests
response = requests.get('https://www.example.com')
print(response.status_code) # 输出 HTTP 状态码
print(response.text) # 输出网页内容
常见请求方法
-
requests.get(url, params=None, **kwargs)
: 发送 GET 请求。 -
requests.post(url, data=None, json=None, **kwargs)
: 发送 POST 请求。 -
requests.put(url, data=None, **kwargs)
: 发送 PUT 请求。 -
requests.delete(url, **kwargs)
: 发送 DELETE 请求。
请求参数
-
params
: 用于传递 GET 请求的查询参数。 -
data
: 用于传递 POST 请求的表单数据。 -
json
: 用于传递 POST 请求的 JSON 数据。 -
headers
: 用于设置请求头信息。 -
cookies
: 用于设置请求的 Cookie 信息。 -
timeout
: 用于设置请求超时时间。
响应处理
-
response.status_code
: 获取 HTTP 状态码。 -
response.text
: 获取响应内容的字符串形式。 -
response.content
: 获取响应内容的字节形式。 -
response.json()
: 将响应内容解析为 JSON 格式。 -
response.headers
: 获取响应头信息。 -
response.cookies
: 获取响应的 Cookie 信息。
(二)Python 中的 Beautiful Soup 库
Beautiful Soup 是一个 Python 库,用于解析 HTML 和 XML 文档。它提供了简单易用的接口,可以方便地从网页中提取数据。
安装与基本用法
pip install beautifulsoup4
from bs4 import BeautifulSoup
html_doc = """
<html>
<head>
<title>示例网页</title>
</head>
<body>
<h1>欢迎来到示例网页</h1>
<p class="description">这是一个示例网页,用于演示 Beautiful Soup 的用法。</p>
<a href="https://www.example.com">示例链接</a>
</body>
</html>
"""
soup = BeautifulSoup(html_doc, 'html.parser')
print(soup.prettify()) # 输出格式化后的 HTML 内容
基本解析方法
-
soup.find(name, attrs=None, recursive=True, string=None, **kwargs)
: 查找第一个匹配的标签。 -
soup.findall(name, attrs=None, recursive=True, string=None, **kwargs)
: 查找所有匹配的标签。 -
soup.select(selector)
: 使用 CSS 选择器查找标签。
标签操作
-
tag.name
: 获取标签的名称。 -
tag.attrs
: 获取标签的属性字典。 -
tag.string
: 获取标签的字符串内容。 -
tag.get_text()
: 获取标签及其子标签的所有文本内容。
(三)爬虫进阶技巧
动态网页爬取
对于动态加载内容的网页(如通过 JavaScript 渲染的网页),可以使用 Selenium 或 Playwright 等工具模拟浏览器行为。
pip install selenium
from selenium import webdriver
driver = webdriver.Chrome()
driver.get('https://www.example.com')
html_content = driver.page_source
driver.quit()
数据存储
爬取到的数据可以存储到文件或数据库中。常见的存储方式包括:
-
存储到 CSV 文件:
import csv
with open('data.csv', 'w', newline='') as csvfile:
writer = csv.writer(csvfile)
writer.writerow(['标题', '链接'])
writer.writerow(['示例网页', 'https://www.example.com'])
-
存储到 SQLite 数据库:
pip install sqlite3
import sqlite3
conn = sqlite3.connect('data.db')
cursor = conn.cursor()
cursor.execute('''CREATE TABLE IF NOT EXISTS pages
(id INTEGER PRIMARY KEY AUTOINCREMENT, title TEXT, url TEXT)''')
cursor.execute('INSERT INTO pages (title, url) VALUES (?, ?)',
('示例网页', 'https://www.example.com'))
conn.commit()
conn.close()
爬虫的法律与道德问题
在开发和使用 Web 爬虫时,必须遵守相关法律法规和道德准则:
-
遵守网站的 robots.txt 文件:该文件规定了爬虫可以访问的网站内容范围。
-
尊重网站的访问限制:不要频繁请求,以免给网站服务器造成过大负担。
-
不要爬取受版权保护的数据:未经授权爬取和使用受版权保护的数据是违法的。
-
保护用户隐私:不要爬取和泄露用户的个人隐私信息。
知识图谱基础和爬虫技术是 NLP 和数据处理领域的重要组成部分。通过理解知识图谱的概念和任务,以及掌握爬虫常用模块的使用方法,能够为构建和丰富知识图谱提供强大的支持。在实际应用中,应遵循法律法规和道德准则,合理利用这些技术获取和组织知识资源。