爬取全部豆瓣电影短评
时间: 2025-05-31 20:09:55 浏览: 13
### 如何使用Python爬虫抓取豆瓣电影全部短评
为了有效地抓取豆瓣电影的全部短评,可以采用Scrapy框架构建一个高效的爬虫程序。此过程涉及多个方面的工作,包括但不限于发送HTTP请求、解析HTML文档以及管理数据流。
#### 构建Scrapy项目并定义Spider类
首先创建一个新的Scrapy项目,并在其中定义特定于目标网站(即豆瓣)的Spider类。该类负责初始化URL列表、配置项以及其他辅助函数:
```python
import scrapy
from ..items import DoubanMovieReviewsItem # 假设已自定义item
class MovieReviewSpider(scrapy.Spider):
name = "movie_reviews"
allowed_domains = ["douban.com"]
start_urls = ['https://movie.douban.com/subject/{movie_id}/comments'.format(movie_id='MOVIE_ID')]
def parse(self, response):
reviews = []
for review in response.css('div.comment-item'):
item = DoubanMovieReviewsItem()
item['username'] = review.xpath('.//span[@class="comment-info"]/a/text()').get().strip(),
item['rating'] = int(review.css('span.rating::attr(class)').re_first(r'llstar(\d+)') or '0')
item['content'] = ''.join([text.strip() for text in review.css('p::text').extract()])
reviews.append(item)
yield {'reviews': reviews}
next_page_url = response.css('a.next::attr(href)').get()
if next_page_url is not None:
yield scrapy.Request(response.urljoin(next_page_url))
```
上述代码片段展示了如何遍历每一页评论区中的单条评论节点,提取用户名、评分等级及具体内容等信息[^1]。
#### 设置合理的请求间隔与重试机制
为了避免触发反爬策略,在设置`DOWNLOAD_DELAY`参数的同时也应考虑启用自动重定向功能和错误页面处理逻辑。这有助于提高成功率并减少不必要的资源消耗。
```python
# settings.py 中加入以下配置项
ROBOTSTXT_OBEY = False
CONCURRENT_REQUESTS_PER_DOMAIN = 8
DOWNLOAD_DELAY = random.uniform(1.5, 3)
RETRY_HTTP_CODES = [500, 502, 503, 504, 400, 403, 404, 408]
DOWNLOADER_MIDDLEWARES = {
'scrapy.downloadermiddlewares.retry.RetryMiddleware': 90,
}
```
此外,还可以利用中间件模拟浏览器行为或更换User-Agent字符串等方式进一步优化访问模式[^2]。
#### 存储收集到的数据
对于所获得的信息可以选择多种方式进行持久化保存,比如CSV文件导出或是数据库记录。这里给出一种简单的方案——将结果写入JSON Lines格式的日志文件内:
```python
FEED_FORMAT = 'jsonlines'
FEED_URI = './data/movie_reviews.jsonl' # 输出路径可根据实际情况调整
ITEM_PIPELINES = {
'__main__.JsonWriterPipeline': 1
}
```
以上措施能够确保每次成功获取一条完整的影评后立即追加至指定位置而不影响其他部分的内容完整性。
阅读全文
相关推荐

















