python网页数据抓取(Python爬虫入门,快速抓取*敏*感*词*数据(第一部分)(组图))
优采云 发布时间: 2021-10-20 01:20python网页数据抓取(Python爬虫入门,快速抓取*敏*感*词*数据(第一部分)(组图))
如果您还没有阅读前两部分,我建议您先阅读前两部分:
Python爬虫入门,快速爬取*敏*感*词*数据(一)
Python爬虫入门,快速爬取*敏*感*词*数据(二)
在这一部分,我们将看看如何存储数据。有两部分数据需要存储。一部分是我们抓取到的网页地址和没有抓取到的网页地址;另一部分是我们爬取的数据。想到的第一种存储方法是使用关系数据库进行存储。
在关系数据库中,表是存储在数据库中的关系数据的集合。一个数据库通常收录多个表。要操作关系数据库,首先需要连接数据库。数据库连接称为连接;连接数据库后,需要打开Cursor游标,通过Cursor执行SQL语句。
使用 SQLite 存储数据
SQLite 是一个嵌入式数据库,它的数据库是一个文件。Python 内置了 SQLite3,所以我们不需要安装任何额外的东西。本着从最简单开始逐步深入的原则,我们先看看如何使用SQLite来存储数据,然后再看看如何使用其他关系型数据库。
在我们的数据库中创建一个 url 表,该表收录两个字段 url 和时间戳。时间戳字段记录了url采集的时间,没有采集的时间戳为空。
import sqlite3
# 创建数据库表,只需要运行一次
def initialize_db(url):
connection = sqlite3.connect('test.db')
cursor = connection.cursor()
cursor.execute("CREATE TABLE urls(url string PRIMARY KEY NOT NULL, timestamp TimeStamp)")
connection.commit()
connection.close()
下面的函数 add_new_url() 用于添加一个新的不是 采集 的 url 数据库表。
import sqlite3
def add_new_url(url):
connection = None
cursor = None
# 建立mysql数据库的connection
connection = sqlite3.connect('test.db')
cursor = conn.cursor()
# 添加新的URL到数据库的urls表中
sql = "INSERT INTO urls(url) VALUES('%s')" % (url)
cursor.execute(sql)
connnection.commit()
connection.close()
以下函数 get_unvisited_url() 将从数据库返回一个 url 为 采集。
import sqlite3
def get_unvisited_url():
url = None
connection = None
cursor = None
# 建立mysql数据库的connection
connection = sqlite3.connect('test.db')
cursor = connection.cursor()
# 从数据库的url表中选择新的一个URL
sql = "SELECT url FROM urls WHERE timestamp IS NULL LIMIT 1";
cursor.execute(sql)
for r in cursor.fetchall():
url = r[0]
# 更新当前记录的时间戳为当前时间
sql = "UPDATE urls SET timestamp = CURRENT_TIMESTAMP WHERE url = '%s'" % (url)
cursor.execute(sql)
connection.commit()
connection.close()
return url
使用 MySQL 存储数据
这部分我们已经安装并搭建了一个Mysql数据库,这里就不讨论如何搭建Mysql数据库了。如果您在上一节中学习了如何在 SQLite 中存储数据,那么您已经学习了基本的 Python 数据库编程。理解下面的代码没有问题。与 SQLite 版本的区别仅在于数据库连接的方式。
import MySQLdb
def add_new_url(url):
connection = None
cursor = None
# 建立mysql数据库的connection
connection = MySQLdb.connect(host = DB_HOSTNAME, user = DB_USER, passwd = DB_PASSWORD, db = DB_NAME, port = DB_PORT)
cursor = conn.cursor()
# 添加新的URL到数据库的urls表中
sql = "INSERT INTO urls SET url='%s'" % (MySQLdb.escape_string(url))
curor.execute(sql)
connnection.commit()
connection.close()
import MySQLdb
def get_unvisited_url():
url = None
connection = None
cursor = None
# 建立mysql数据库的connection
connection = MySQLdb.connect(host = DB_HOSTNAME, user = DB_USER, passwd = DB_PASSWORD, db = DB_NAME, port = DB_PORT)
cursor = conn.cursor()
# 从数据库的url表中选择新的一个URL
sql = "SELECT url FROM urls WHERE timestam IS NULL ORDER BY rand() LIMIT 1";
cur.execute(sql)
for r in cur.fetchall():
url = r[0]
# 更新当前记录的时间戳为当前时间
sql = "UPDATE urls SET timestamp = '%s' WHERE url = '%s'" % (MySQLdb.escape_string(url)
cursor.execute(sql)
connection.commit()
connection.close()
return url
总结
在这一部分中,我们讨论了如何将我们的 URL 存储在关系数据库中。作为扩展练习,读者还可以使用相同的方法来保存抓取的网页内容。除了关系型数据库,我们还可以使用非关系型数据来存储数据。
此外,在接下来的章节中,我们将讨论如何抓取具有动态生成内容的网页。
来源:/i6557228344381800967/