在前面的章节中,我们系统地学习了Python网络爬虫的基础知识,包括HTTP请求与响应、网页解析技术(如正则表达式、BeautifulSoup、lxml等)、以及处理JavaScript动态加载内容的高级技巧。现在,是时候将这些理论知识应用到实践中去了。本章节将通过一个基础但全面的爬虫案例,带你从头到尾实现一个网络爬虫项目,旨在抓取指定网站的数据,并进行简单的存储与分析。
假设我们需要爬取一个名为“电影天堂”的网站(注:这里仅为示例,实际开发中需遵守目标网站的robots.txt
规则及法律法规),该网站提供了丰富的电影资源下载信息,包括电影名称、导演、主演、上映时间、下载链接等。我们的目标是爬取该网站首页上所有电影的基本信息,并将这些信息保存至本地数据库或文件中。
在开始编写爬虫之前,请确保你的开发环境中已安装以下必要的库:
你可以通过pip命令安装这些库:
pip install requests beautifulsoup4 pandas sqlite3
注意:sqlite3
是Python标准库的一部分,通常不需要单独安装。
requests
库向目标网站发送HTTP GET请求,获取首页HTML内容。BeautifulSoup
解析HTML,提取电影列表中的相关信息。以下是基于上述规划的爬虫代码示例:
import requests
from bs4 import BeautifulSoup
import sqlite3
import pandas as pd
# 目标网站URL
url = 'http://example.movieheaven.com/'
# 数据库连接函数
def create_connection(db_file):
conn = None
try:
conn = sqlite3.connect(db_file)
return conn
except Error as e:
print(e)
return conn
# 创建表
def create_table(conn, create_table_sql):
try:
c = conn.cursor()
c.execute(create_table_sql)
except Error as e:
print(e)
# 插入数据
def insert_data(conn, movie):
sql = ''' INSERT INTO movies(title, director, stars, release_date, download_link)
VALUES(?,?,?,?,?) '''
cur = conn.cursor()
cur.execute(sql, movie)
conn.commit()
# 爬取函数
def scrape_movies(url):
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}
response = requests.get(url, headers=headers)
soup = BeautifulSoup(response.text, 'html.parser')
# 假设电影信息存储在class为"movie-item"的div中
movies_list = soup.find_all('div', class_='movie-item')
# 数据库连接
conn = create_connection('movies.db')
if conn is not None:
# 创建表(如果尚未创建)
create_table_sql = ''' CREATE TABLE IF NOT EXISTS movies (
id INTEGER PRIMARY KEY AUTOINCREMENT,
title TEXT NOT NULL,
director TEXT,
stars TEXT,
release_date TEXT,
download_link TEXT
); '''
create_table(conn, create_table_sql)
# 遍历电影列表,提取并插入数据
for movie_item in movies_list:
title = movie_item.find('h3', class_='title').get_text(strip=True)
director = movie_item.find('p', class_='director').get_text(strip=True)
stars = movie_item.find('p', class_='stars').get_text(strip=True)
release_date = movie_item.find('p', class_='release-date').get_text(strip=True)
download_link = movie_item.find('a', class_='download-link').get('href')
movie = (title, director, stars, release_date, download_link)
insert_data(conn, movie)
conn.close()
# 执行爬取
scrape_movies(url)
robots.txt
规则,以及相关法律法规,避免侵犯版权或进行非法数据抓取。通过本章节的基础爬虫案例实战,我们不仅复习了网络爬虫的核心技术,还通过实战项目加深了对这些技术的理解和应用。在实际开发中,你可能会遇到各种各样的问题和挑战,但只要掌握了基本的方法和思路,就能够灵活应对。希望这个案例能够为你今后的爬虫开发之路提供一些有益的参考和启示。