多线程代码爬取豆瓣电影Top250,代码表达
时间: 2024-10-14 14:06:07 浏览: 82
在Python中,使用多线程进行豆瓣电影Top250的爬取可以提高效率,避免单线程时由于网络请求阻塞导致的性能瓶颈。下面是一个简单的示例,使用`requests`库获取HTML,`BeautifulSoup`解析内容,`threading`模块创建并管理线程:
```python
import requests
from bs4 import BeautifulSoup
import threading
# 豆瓣电影Top250的URL
url = "https://movie.douban.com/top250"
def get_movie_page(thread_num):
# 每个线程处理的页数范围
start = thread_num * 25
end = (thread_num + 1) * 25 if thread_num < 10 else 250
page_url = url + "?start={}&limit=25".format(start)
response = requests.get(page_url)
soup = BeautifulSoup(response.text, 'html.parser')
# 解析数据并处理...
movies = parse_movies(soup) # 自定义函数,解析HTML提取电影信息
return movies
def parse_movies(soup): # 根据实际页面结构自定义解析函数
movie_list = []
for item in soup.find_all('div', class_='hd'):
title = item.a['title']
rating = item.strong.string
movie_list.append((title, rating))
return movie_list
# 创建线程池
threads = []
for i in range(10): # 这里假设最多同时开10个线程
t = threading.Thread(target=get_movie_page, args=(i,))
threads.append(t)
t.start()
# 等待所有线程完成
for t in threads:
t.join()
# 所有线程返回的数据合并
all_movies = [item for thread_movies in [t.result() for t in threads] for item in thread_movies]
print("Top 250电影爬取完成")
```
在这个示例中,我们创建了10个线程,并让每个线程负责爬取电影列表的一部分。请注意,实际的网页抓取和解析部分需要根据豆瓣电影的具体网页结构调整。
阅读全文