Python轻松实现:抓取网站数据库 (python 抓取网站数据库)
随着互联网的普及和发展,我们可以轻松地在网上浏览和获取各种信息和数据。但是,如果我们想要获取某个特定的网站的数据,该怎么办呢?这时候,Python就可以为我们提供帮助了。本文将介绍如何使用Python轻松实现抓取网站数据库的方法。
1. 确定目标网站
我们需要确定要获取数据的目标网站。在这里,我们以豆瓣电影为例。豆瓣电影是一个非常知名的电影评价网站,其中包含了大量的电影信息和评价。我们将通过Python抓取豆瓣电影的电影信息和评价,并将其保存到本地的数据库中。
2. 安装必需的库
为了实现抓取网站数据库的功能,需要使用Python中的requests和beautifulsoup4两个库。这两个库可以通过pip命令轻松安装,如下所示:
“`
pip install requests
pip install beautifulsoup4
“`
requests库用于发送HTTP请求和获取网页数据。beautifulsoup4库则可以帮助我们解析HTML页面并提取需要的数据。
3. 获取网页数据
Python中的requests库提供了一个简单的get()函数,可以用于获取指定网页的数据。我们可以调用该函数来获取豆瓣电影的电影列表信息。代码如下所示:
“`python
import requests
url = “https://movie.douban.com/top250?start={}&filter=”
headers = {
“User-Agent”: “Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Safari/537.36”
}
def get_movie_list(start):
res = requests.get(url.format(start), headers=headers)
if res.status_code == 200:
return res.text
else:
return None
“`
这里我们使用了一个url变量,通过字符串的.format()函数将不同的起始页码传递给它,从而获取不同页面的电影列表信息。
4. 解析HTML页面
获得豆瓣电影的电影列表信息后,我们就需要使用beautifulsoup4库来解析它并提取需要的数据。我们需要将获取的页面数据传递给beautifulsoup4库,并使用该库提供的一些函数来查找和提取需要的信息。
豆瓣电影的电影列表信息在一个id为“content”的div标签下,我们可以使用beautifulsoup4库中的find()函数来找到这个标签。具体代码如下:
“`python
from bs4 import BeautifulSoup
def parse_movie_list(html):
soup = BeautifulSoup(html, “html.parser”)
content = soup.find(“div”, id=”content”)
movies = content.find_all(“div”, class_=”item”)
for movie in movies:
# 解析电影信息
pass
“`
在使用find()函数找到电影列表信息之后,我们又使用了find_all()函数来查找其中的每个电影信息。这里我们只是先占个位,具体的提取和处理电影信息的过程将在下一部分中进行。
5. 处理电影信息并保存到数据库
我们已经成功地获取了豆瓣电影的电影列表信息,并使用beautifulsoup4库来解析和提取其中的电影信息。接下来的任务就是对电影信息进行处理,并将它们保存到本地的数据库中。
为了实现这个功能,我们需要使用Python中的sqlite3库来操作数据库。sqlite3是Python自带的一个轻量级的关系型数据库。我们可以使用它来创建和管理本地的数据库,而不需要安装其他繁琐的数据库软件。
具体代码如下:
“`python
import sqlite3
def save_to_db(movie_list):
conn = sqlite3.connect(“douban.db”)
c = conn.cursor()
c.execute(”’CREATE TABLE IF NOT EXISTS movies (
id INTEGER PRIMARY KEY AUTOINCREMENT,
title TEXT,
year TEXT,
score FLOAT,
director TEXT,
actors TEXT
)”’)
for movie in movie_list:
c.execute(”’INSERT INTO movies(title, year, score, director, actors)
VALUES (?, ?, ?, ?, ?)”’,
(movie[“title”], movie[“year”], movie[“score”], movie[“director”], movie[“actors”]))
conn.commit()
conn.close()
“`
这里我们定义了一个save_to_db()函数,它可以将抓取到的电影信息保存到名为douban.db的数据库中。我们使用sqlite3库连接到数据库。接着,我们使用execute()函数创建movies表,以便将电影信息存储到其中。我们遍历电影列表,将每个电影的信息插入到movies表中。我们使用commit()函数提交所有的更改,并关闭数据库连接。
6. 完整代码
最终,我们将上述所有步骤结合起来,构建一个完整的Python程序,用于抓取豆瓣电影的电影信息并保存到数据库中。
“`python
import requests
from bs4 import BeautifulSoup
import sqlite3
url = “https://movie.douban.com/top250?start={}&filter=”
headers = {
“User-Agent”: “Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Safari/537.36”
}
def get_movie_list(start):
res = requests.get(url.format(start), headers=headers)
if res.status_code == 200:
return res.text
else:
return None
def parse_movie_list(html):
soup = BeautifulSoup(html, “html.parser”)
content = soup.find(“div”, id=”content”)
movies = content.find_all(“div”, class_=”item”)
movie_list = []
for movie in movies:
title = movie.find(“span”, class_=”title”).string
year = movie.find(“span”, class_=”year”).string
score = movie.find(“span”, class_=”rating_num”).string
director = movie.find(“div”, class_=”bd”).find(“p”).text.split(“导演:”)[1].split(“主演:”)[0].strip()
actors = movie.find(“div”, class_=”bd”).find(“p”).text.split(“主演:”)[1].strip()
movie_info = {
“title”: title,
“year”: year,
“score”: score,
“director”: director,
“actors”: actors
}
movie_list.append(movie_info)
return movie_list
def save_to_db(movie_list):
conn = sqlite3.connect(“douban.db”)
c = conn.cursor()
c.execute(”’CREATE TABLE IF NOT EXISTS movies (
id INTEGER PRIMARY KEY AUTOINCREMENT,
title TEXT,
year TEXT,
score FLOAT,
director TEXT,
actors TEXT
)”’)
for movie in movie_list:
c.execute(”’INSERT INTO movies(title, year, score, director, actors)
VALUES (?, ?, ?, ?, ?)”’,
(movie[“title”], movie[“year”], movie[“score”], movie[“director”], movie[“actors”]))
conn.commit()
conn.close()
if __name__ == ‘__mn__’:
movie_list = []
for start in range(0, 250, 25):
html = get_movie_list(start)
movie_list += parse_movie_list(html)
save_to_db(movie_list)
“`
在这个程序中,我们使用了一个for循环来依次获取豆瓣电影的25个电影列表页面,并将它们拼接起来,以便一次性地抓取所有的电影信息。随后,我们在每个循环中调用parse_movie_list()函数来解析当前页面的电影信息,并将其保存到一个名为movie_list的列表中。我们将该列表传递给save_to_db()函数,将抓取到的电影信息保存到本地的douban.db数据库中。
7.
本文介绍了如何使用Python轻松实现抓取网站数据库的方法,以豆瓣电影为例,演示了如何获得豆瓣电影电影列表信息,解析HTML页面,并将抓取到的电影信息保存到本地数据库中。通过这些操作,我们可以轻松地抓取各种网站的数据,并且可以将其保存在本地的数据库中,以便后续的分析和处理。