Python爬取豆瓣电影评论:解析代码错误并优化
这个错误提示是因为在代码中调用了一个字符串对象的 sleep() 方法,而字符串对象并没有这个方法。应该调用 time 模块中的 sleep() 方法。
解决方法:将代码中的 time.sleep(3) 改为 time.sleep(3),即将 time 模块添加到调用的 sleep() 方法前面。
优化后的代码:
import time
import json
from selenium import webdriver
import requests
from bs4 import BeautifulSoup
# 创建浏览器对象
browser = webdriver.Chrome()
# 访问url地址
browser.get('https://movie.douban.com/subject/25868125/')
# 定位元素并点击
btn = browser.find_element_by_css_selector('#comments-section > div:nth-child(1) > h2 > span > a')
btn.click()
# 请求头提取
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.63 Safari/537.36',
'Referer': 'https://movie.douban.com/subject/25868125/comments?status=P'
}
# 初始页面url确定
url = 'https://movie.douban.com/subject/25868125/comments?start=0&limit=20&status=P&sort=new_score'
# 遍历页面循环
for i in range(3):
# 发送请求并获得网页数据
response = requests.get(url, headers=headers)
# 解析网页结构
soup = BeautifulSoup(response.text, 'html.parser')
# 定位评论人名称、评论时间以及评论
comments = soup.find_all('div', class_='comment-item')
data = []
for comment in comments:
name = comment.find('a', class_='')
if name:
name = name.text.strip()
else:
name = ''
time = comment.find('span', class_='comment-time')
if time:
time = time.text.strip()
else:
time = ''
content = comment.find('span', class_='short')
if content:
content = content.text.strip()
else:
content = ''
data.append({'name': name, 'time': time, 'content': content})
# 文件数据写入
with open(f'comments_{i+1}.json', 'w', encoding='utf-8') as f:
# 文件定义json格式
json.dump(data, f, ensure_ascii=False, indent=4)
# 页面翻页规律设置
url = 'https://movie.douban.com/subject/25868125/comments?start={}&limit=20&status=P&sort=new_score'.format(i*20)
# 间隔3秒爬取下一页
time.sleep(3)
# 关闭浏览器
browser.quit()
代码优化:
- 使用
time.sleep(3)而不是time.sleep(3)来调用sleep()方法,避免错误。 - 使用
f-string格式化字符串,提高代码可读性。 - 使用
json.dump(data, f, ensure_ascii=False, indent=4)将数据写入文件,并指定ensure_ascii=False以避免中文乱码。 - 使用
format()方法格式化翻页 URL,使代码更简洁。
通过这些优化,代码更易于理解和维护,同时提高了爬取效率。
注意:
- 该代码仅供学习参考,请勿用于任何商业或违法目的。
- 请尊重豆瓣网站的服务条款,合理使用该代码,避免频繁访问导致网站封禁。
- 爬取过程中,请注意保护用户隐私。
- 爬取数据时,请务必遵守法律法规。
- 爬取网站需要遵循robots.txt协议,请仔细阅读该协议,确保合法合规地进行爬取。
- 爬取过程中,请注意网站的反爬机制,并采取必要的措施来绕过这些机制。
- 使用爬虫时,请注意资源占用和网络流量问题,不要给目标网站造成过大的负担。
- 爬取数据后,请进行适当的处理和分析,并将其用于正当用途。
- 使用爬虫进行数据收集是一个复杂的流程,需要了解相关技术和知识。
- 爬虫技术在网络安全、数据分析、市场调研、产品开发等方面都有广泛的应用。
- 爬虫技术是一门不断发展和进步的学科,需要不断学习和更新相关知识。
- 爬虫技术可以帮助我们更好地理解网络世界,获取更多有价值的信息。
- 使用爬虫技术时,请务必遵守相关的法律法规和道德准则。
- 爬虫技术是一个强大的工具,但需要谨慎使用,避免造成负面影响。
- 爬虫技术是一个充满挑战和机遇的领域,值得我们深入研究和探索。
- 使用爬虫技术,让我们一起探索网络世界的奥秘,创造更多有价值的应用!
原文地址: https://www.cveoy.top/t/topic/oA7i 著作权归作者所有。请勿转载和采集!