帮我写一段代码,用python实现实时爬取豆瓣热门电影的信息300条,并保存到sqlite3数据库中
时间: 2023-06-07 09:09:25 浏览: 127
好的,以下是代码:
```python
import requests
from bs4 import BeautifulSoup
import sqlite3
import time
# 设置请求头信息
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'}
# 请求网页并解析数据
def parse_html(url):
response = requests.get(url, headers=headers)
soup = BeautifulSoup(response.content, 'html.parser')
return soup
# 获取电影信息
def get_movies():
# 定义电影信息列表
movies_list = []
# 循环获取每一页的电影信息
for i in range(0, 300, 20):
url = f'https://movie.douban.com/top250?start={i}&filter='
soup = parse_html(url)
# 解析电影信息
for item in soup.find_all('div', class_='item'):
title = item.find('div', class_='hd').a.text.strip()
info = item.find('div', class_='bd').p.text.strip()
rating = item.find('span', class_='rating_num').text.strip()
summary = item.find('span', class_='inq').text.strip()
# 将电影信息保存到列表中
movie = (title, info, rating, summary)
movies_list.append(movie)
# 设置爬虫间隔时间,避免被封IP
time.sleep(2)
return movies_list
# 将电影信息保存到数据库中
def save_to_sqlite(movies):
# 连接数据库
conn = sqlite3.connect('movies.db')
# 创建数据表
conn.execute('''
CREATE TABLE IF NOT EXISTS movies
(id INTEGER PRIMARY KEY AUTOINCREMENT,
title TEXT,
info TEXT,
rating REAL,
summary TEXT);
''')
# 插入数据
for movie in movies:
conn.execute(f'''
INSERT INTO movies (title, info, rating, summary)
VALUES ("{movie[0]}", "{movie[1]}", {movie[2]}, "{movie[3]}");
''')
# 提交事务
conn.commit()
# 关闭数据库连接
conn.close()
# 爬取电影信息并保存到数据库
if __name__ == '__main__':
movies = get_movies()
save_to_sqlite(movies)
```
这段代码实现了实时爬取豆瓣电影top250页面中的电影信息,并将电影的标题、信息、评分和简介存储到sqlite数据库中,每一页最多爬取20条电影信息。函数`get_movies()`用于获取电影信息,函数`save_to_sqlite()`用于将电影信息保存到sqlite数据库中。这段代码每爬取一页电影信息会在爬取完后暂停2秒,以避免被封IP。
阅读全文