Python爬虫爬取豆瓣电影评论内容,评论时间和评论人
我们可以看到影评比较长,需要展开才能完整显示。但是在网页源码中是没有显示完整影评的。所以我们考虑到这部分应该是异步加载的方式显示。所以打开网页的开发者选项,可以看到点击展开之后,多了一条full的网页。这个网页就包含了完整评论。
我们观察到全部评论所在的网址为https://movie.douban.com/j/review/9593388/full
获取索引页https://movie.douban.com/review/best/?start=0,索引页只需要改变start=0,20,40即可访问下一页
解析索引页,把索引页中的10个评论的ID获取到
通过获取到的ID构建完整评论网址https://movie.douban.com/j/review/’ + str(id) + '/full
解析评论页,获取评论者姓名和评论内容,写入txt文件
附上源码:
import urllib.request
import re
comment = 'E:\\pachong\\bais.txt'
T='<span content=".*?" class=".*?">.*?</span>'
for i in range(10):
print("获取第"+str(i+1)+"页")
url = "https://movie.douban.com/subject/30331149/reviews?start="+str(i*20) # 确定要爬取的入口链接
# 模拟成浏览器并爬取对应的网页 谷歌浏览器
headers = {'User-Agent',
'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36'}
opener = urllib.request.build_opener()
opener.addheaders = [headers]
data = opener.open(url).read().decode('utf8')
time_pattern = re.compile('<span content=".*?" class=".*?">(.*?)</span>', re.S)
time = re.findall(time_pattern, data)
id_pattern= re.compile('<h2><a href="https://movie.douban.com/review/(.*?)/', re.S)
id= re.findall(name_pattern, data)
for j in range(len(id)):
html = 'https://movie.douban.com/j/review/' + str(id[j]) + '/full'
data = opener.open(html).read().decode('utf8')
html = data
content_pattern = re.compile('data-original(.*?)main-author', re.S)
content = re.findall(content_pattern, html)
text_pattern = re.compile('[\u4e00-\u9fa5|,、“”‘’:!~@#¥【】*()——+。;?]+', re.S)
text = re.findall(text_pattern, content[0])
text = ''.join(text)
name_pattern = re.compile('data-author=.*?"(.*?)"', re.S)
name = re.findall(name_pattern, html)
with open(comment, 'a', encoding='utf-8-sig') as f:
f.write(name[0].strip('\\') + '\n')
f.write(time[j]+'\n')
f.write(str(text) + '\n')
f.write('\n')
f.close()
一个认识的朋友发现了一个地方写错了 现已修改 完全可以使用 原来报错找不到id 是我写错了 现在代码已修正 可以使用