用python爬取豆瓣读书网中图书的封面照片、书名、出版社、出版时间、作者,图书价格,评分,评论人数并存储到mongodb中
时间: 2023-07-10 11:03:18 浏览: 168
Python爬取豆瓣图书信息
好的,以下是代码实现:
```python
import requests
from bs4 import BeautifulSoup
import pymongo
# 连接mongodb数据库
client = pymongo.MongoClient("mongodb://localhost:27017/")
# 创建数据库
db = client["douban_book"]
# 创建集合
collection = db["books"]
# 请求头信息
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 get_html(url):
try:
response = requests.get(url, headers=headers)
if response.status_code == 200:
return response.text
except requests.RequestException:
return None
# 获取图书信息
def get_book_info(book_url):
html = get_html(book_url)
soup = BeautifulSoup(html, 'lxml')
# 图书封面
cover = soup.find('div', class_='nbg').find('img')['src']
# 图书名称
name = soup.find('span', property='v:itemreviewed').text.strip()
# 作者
author = soup.find('span', class_='pl', text='作者').next_sibling.next_sibling.text.strip()
# 出版社
publisher = soup.find('span', class_='pl', text='出版社').next_sibling.strip()
# 出版时间
pub_date = soup.find('span', class_='pl', text='出版年').next_sibling.strip()
# 价格
price = soup.find('span', class_='pl', text='定价').next_sibling.strip()
# 评分
rating = soup.find('strong', class_='rating_num').text.strip()
# 评论人数
comments = soup.find('span', class_='rating_people').text.strip()
# 存储到mongodb中
book_info = {
'cover': cover,
'name': name,
'author': author,
'publisher': publisher,
'pub_date': pub_date,
'price': price,
'rating': rating,
'comments': comments
}
collection.insert_one(book_info)
print('保存成功:', book_info)
# 获取图书列表信息
def get_book_list(url):
html = get_html(url)
soup = BeautifulSoup(html, 'lxml')
# 获取图书列表
book_list = soup.find('div', class_='article').find_all('li')
for book in book_list:
# 获取图书链接
book_url = book.find('div', class_='pic').find('a')['href']
get_book_info(book_url)
if __name__ == '__main__':
for i in range(0, 250, 25):
url = 'https://book.douban.com/top250?start={}'.format(i)
get_book_list(url)
```
解释一下代码:
1. 首先,我们要连接到 `mongodb` 数据库,创建一个名为 `douban_book` 的数据库,以及一个名为 `books` 的集合。
2. 然后,我们设置请求头信息,模拟浏览器发送请求。
3. 接着,我们定义一个 `get_html` 函数用于获取页面信息,如果请求成功则返回页面内容,否则返回 `None`。
4. 然后,我们定义一个 `get_book_info` 函数,用于获取图书信息。这个函数接收一个图书链接作为参数,然后解析页面内容,提取出想要的图书信息,存储到 `mongodb` 数据库中。
5. 最后,我们定义一个 `get_book_list` 函数,用于获取图书列表信息。这个函数接收一个链接作为参数,解析页面内容,获取图书列表,然后循环遍历列表,逐一获取每本图书的信息,调用 `get_book_info` 函数进行存储。
6. 在主函数中,我们循环遍历 `https://book.douban.com/top250` 页面的每一页,调用 `get_book_list` 函数进行爬取。
注意:由于豆瓣网的反爬虫机制比较强,如果爬取过于频繁,可能会被封禁 IP,建议使用代理 IP 进行爬取。
阅读全文