复制
收藏
提问
简洁
给我一个符合爬虫程序组成结构且生动形象的例子
1周前
全网
文档
学术
百科
知识库
回答简洁模式
深入研究一些
- 爬虫程序组成结构示例:豆瓣电影Top250爬取
爬虫组成结构
- 调度器:负责分配爬取任务,决定哪些页面需要被爬取。
- URL管理器:管理待爬取的URL队列,避免重复爬取。
- 下载器:发送HTTP请求,获取网页内容。
- 解析器:从下载的网页中提取有用信息,如电影名称、评分。
- 存储器:将提取的数据保存到数据库或文件中。
代码示例
import requests
from bs4 import BeautifulSoup
import csv
# 下载器:发送请求获取网页
def fetch_page(url):
headers = {
'User-Agent': 'Mozilla/5.0'
}
response = requests.get(url, headers=headers)
return response.text
# 解析器:提取电影信息
def parse_movies(html):
soup = BeautifulSoup(html, 'lxml')
movies = []
for item in soup.find_all('div', class_='item'):
title = item.find('span', class_='title').get_text()
rating = item.find('span', class_='rating_num').get_text()
movies.append([title, rating])
return movies
# 存储器:保存数据到CSV
def save_to_csv(movies, filename):
with open(filename, 'w', newline='', encoding='utf-8') as f:
writer = csv.writer(f)
writer.writerow(['Title', 'Rating'])
for movie in movies:
writer.writerow(movie)
# 主程序
def main():
url = 'https://movie.douban.com/top250'
html = fetch_page(url)
movies = parse_movies(html)
save_to_csv(movies, 'douban_top250.csv')
if __name__ == '__main__':
main()
- 调度器:在实际应用中,可以使用队列来管理待爬取的URL,如使用Redis等工具。
- URL管理器:可以使用集合或数据库来存储已爬取的URL,避免重复爬取。
你觉得结果怎么样?