python网页数据抓取(Python爬虫入门,快速抓取*敏*感*词*数据(第一部分)(组图))

优采云 发布时间: 2021-10-20 01:20

  python网页数据抓取(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/

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线