python多线程爬取数据,并写入csv
时间: 2024-04-25 15:14:46 浏览: 410
可以使用Python的多线程模块`threading`来实现多线程爬取数据,并使用`csv`模块将数据写入CSV文件。
以下是一个示例代码,用于爬取豆瓣电影Top250的电影名称、评分和链接,并将数据写入CSV文件中。
```python
import requests
import csv
import threading
from bs4 import BeautifulSoup
def get_movie_info(start):
url = f'https://movie.douban.com/top250?start={start}'
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')
movie_list = soup.find(class_='grid_view').find_all('li')
for movie in movie_list:
title = movie.find(class_='title').text
rating = movie.find(class_='rating_num').text
link = movie.find('a')['href']
movie_info = [title, rating, link]
write_to_csv(movie_info)
def write_to_csv(movie_info):
with open('douban_top250.csv', 'a', newline='', encoding='utf-8-sig') as f:
writer = csv.writer(f)
writer.writerow(movie_info)
if __name__ == '__main__':
threads = []
for i in range(0, 250, 25):
t = threading.Thread(target=get_movie_info, args=(i,))
threads.append(t)
t.start()
for t in threads:
t.join()
```
在上面的代码中,我们首先定义了一个`get_movie_info`函数用于爬取每一页的电影信息。在函数中,我们使用`requests`模块发送HTTP请求,获取网页的HTML源代码,并使用`BeautifulSoup`模块解析HTML文档,获取电影名称、评分和链接信息。
然后,我们定义了一个`write_to_csv`函数用于将获取到的电影信息写入CSV文件中。使用`csv`模块的`writer`函数将电影信息写入CSV文件。
在`if __name__ == '__main__':`中,我们创建了一个线程列表,并循环创建线程,每个线程负责爬取一页电影信息。我们使用`threading.Thread`函数创建线程,将`get_movie_info`函数作为线程的目标函数,并将页码作为参数传递给函数。
然后,我们循环启动所有线程,等待所有线程完成后再退出程序。使用`join`函数等待所有线程完成。
阅读全文