请用Python写一个爬虫程序,爬取当当网图书畅销榜数据
时间: 2023-02-12 21:35:47 浏览: 151
好的,下面是一个简单的 Python 爬虫代码,可以爬取当当网图书畅销榜数据:
```
import requests
from bs4 import BeautifulSoup
url = "http://bang.dangdang.com/books/bestsellers/01.00.00.00.00.00-24hours-0-0-1-1"
response = requests.get(url)
soup = BeautifulSoup(response.text, "html.parser")
books = []
for item in soup.select(".bang_list .bang_list_box li"):
book = {}
book["name"] = item.select(".name a")[0].text
book["author"] = item.select(".publisher_info a")[0].text
book["price"] = item.select(".price span")[0].text
books.append(book)
print(books)
```
这个程序使用了 requests 和 BeautifulSoup 库。首先,它向当当网图书畅销榜发送请求,然后使用 BeautifulSoup 解析 HTML 响应,最后遍历解析出的每一本图书的信息,并将它们存储在一个字典列表中。
相关问题
python爬虫当当网畅销书籍
您可以使用 Python 的爬虫库(例如 BeautifulSoup 或 Scrapy)来爬取当当网的畅销书籍信息。以下是一个简单的示例代码:
```python
import requests
from bs4 import BeautifulSoup
# 构造请求头
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'
}
# 发送请求
response = requests.get('http://bang.dangdang.com/books/bestsellers/01.00.00.00.00.00-year-2021-0-1-1', headers=headers)
# 解析网页内容
soup = BeautifulSoup(response.text, 'html.parser')
# 找到畅销书籍的列表
book_list = soup.find_all('div', class_='name')
# 输出书籍信息
for book in book_list:
print(book.text.strip())
```
这段代码会输出当当网2021年的畅销书籍列表。您可以根据自己的需求进一步提取书名、作者等信息。请注意使用爬虫时要遵守网站的使用规则,不要对网站造成过大的访问压力。
使用MongoDB存储爬虫当当网图书畅销榜
使用MongoDB存储爬虫当当网图书畅销榜是一个常见的数据存储方案。MongoDB是一种NoSQL数据库,具有高扩展性和灵活性,非常适合存储非结构化或半结构化数据。以下是使用MongoDB存储爬虫当当网图书畅销榜的步骤和注意事项:
### 步骤:
1. **环境准备**:
- 安装MongoDB:确保在本地或服务器上安装并配置好MongoDB。
- 安装爬虫工具:可以使用Python的Scrapy框架或其他爬虫工具。
2. **爬虫开发**:
- 编写爬虫代码:从当当网抓取图书畅销榜数据。
- 数据清洗:处理抓取到的数据,确保数据的完整性和准确性。
3. **数据存储**:
- 连接MongoDB:使用Python的`pymongo`库或其他语言的相应库连接MongoDB。
- 创建数据库和集合:例如,创建一个名为`dangdang`的数据库和一个名为`bestsellers`的集合。
- 插入数据:将抓取到的数据插入到MongoDB中。
### 示例代码(Python):
```python
import pymongo
import scrapy
class DangdangSpider(scrapy.Spider):
name = 'dangdang'
start_urls = ['http://www.dangdang.com/']
def parse(self, response):
# 解析页面内容,提取图书信息
books = response.css('div.book-list div.book-item')
for book in books:
title = book.css('a.title::text').get()
author = book.css('a.author::text').get()
price = book.css('span.price::text').get()
yield {
'title': title,
'author': author,
'price': price
}
# MongoDB配置
client = pymongo.MongoClient('mongodb://localhost:27017/')
db = client['dangdang']
collection = db['bestsellers']
# 数据插入
def process_item(self, item, spider):
collection.insert_one(dict(item))
return item
```
### 注意事项:
1. **数据去重**:确保爬取的数据不重复,可以使用MongoDB的唯一索引或程序逻辑去重。
2. **错误处理**:处理爬虫和数据库连接中的异常情况,确保程序的健壮性。
3. **性能优化**:根据数据量和访问频率,优化MongoDB的索引和分片配置,提高查询性能。
### 优点:
- **高扩展性**:MongoDB支持水平扩展,能够处理大规模数据。
- **灵活性**:不需要预先定义表结构,能够存储多种类型的数据。
- **高性能**:MongoDB的查询速度快,适合实时数据处理。
阅读全文