怎么用python在豆瓣读书网爬取500兆数据
时间: 2024-06-08 19:11:09 浏览: 154
爬取大规模数据时需要注意反爬措施,避免被封禁IP等问题。以下是一个大致的爬虫框架,你可以在此基础上进行修改和优化。
```python
import requests
from bs4 import BeautifulSoup
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_one_page(url):
book_info_list = []
response = requests.get(url, headers=headers)
soup = BeautifulSoup(response.text, 'html.parser')
book_list = soup.find_all('li', attrs={'class': 'subject-item'})
for book in book_list:
# 解析书名、评分等信息
book_name = book.find('div', attrs={'class': 'info'}).find('a').get_text().strip()
rating_num = book.find('div', attrs={'class': 'star clearfix'}).find('span', attrs={'class': 'rating_nums'}).get_text().strip()
comment_num = book.find('div', attrs={'class': 'star clearfix'}).find('span', attrs={'class': 'pl'}).get_text().strip().replace('(', '').replace(')', '')
book_info_list.append((book_name, rating_num, comment_num))
return book_info_list
# 定义主函数,用于控制爬取的页数
def main():
book_info_total = []
for i in range(0, 500):
url = 'https://book.douban.com/top250?start={}'.format(i * 25)
book_info = parse_one_page(url)
book_info_total.extend(book_info)
time.sleep(1) # 间隔1秒,避免被封禁IP
# 将结果保存到文件中
with open('book_info.txt', 'w') as f:
for book in book_info_total:
f.write('{}\t{}\t{}\n'.format(book[0], book[1], book[2]))
if __name__ == '__main__':
main()
```
此代码实现了爬取豆瓣图书Top250的书名、评分和评论数信息,每页25本,共爬取20页。如果要爬取更多数据,可以自行修改页数。需要注意的是,爬取大规模数据时,由于网络环境等原因,可能会出现请求失败、程序卡死等问题,需要适当加入异常处理和重试机制。
阅读全文