豆瓣影评爬取——哥斯拉大战金刚短评(小白初学)
1、抓取网页数据
使用python爬虫技术xpath、requests进行爬取哥斯拉大战金刚的短评网页,网页地址:
https://movie.douban.com/subject/26613692/comments
其中,26613692为《哥斯拉大战金刚》的电影ID号,以上网页可以获取20个影评,我们可以指定start参数来获取更多的影评,例如:
https://movie.douban.com/subject/26900949/comments?start=40&limit=20
表示从第 40条开始的20条影评。
(1)导入模块
from lxml import etree #用于解析网页
import requests
#由于网页会对我们的useragent和cookie进行检查,所以在爬取的时候要带上cookie,而且如果一直用一个useragent也会被识别出来,所以得采用不同的useragent。
from fake_useragent import UserAgent
#用于设置睡眠时间
import time
(2)设置不同的useragent
headers = {
'User-Agent' : UserAgent().random
}
(3)抓取到网页源数据
url = 'https://movie.douban.com/subject/26613692/comments?
page_text = requests.get(url=url, headers=headers).text
(4)网页数据解析
tree = etree.HTML(page_text)
(5)找到我们需要的短评数据的标签对象
#//表示直接定位到这个标签的位置,/表示标签的下一级标签,text()表示我们抓取的是文本数据
comments = tree.xpath('//p[@class=" comment-content"]/span/text()')
(6)写入txt文件
注:如果你写入的文件不存在,函数open()会自动创建它。
用写入 'w’模式打开文件时,如果指定的文件已将存在,python将在返回文件对象前清空文件,并写入你要写入的东西。
用 'r+’模式,写入的字符串的长度,将会覆盖你原有的字符串的位置
用附加模式 ‘a’ ,python不会在返回文件前清空,而是将文本添加到文件的末尾。
fp = open('short_comments.txt', 'a', encoding='utf-8')
for comment in comments:
fp.write(comment)
以上代码全部运行将爬取第一页所有影评的内容,如果需要爬取更多则需要设置start参数用循环来进行爬取,直接上完整代码如下:
from lxml import etree
import requests
from fake_useragent import UserAgent
import time
headers = {
'User-Agent' : UserAgent().random
}
#指爬取到页面源码数据,range(0,100)表示爬取100页的影评数据
for i in range(0,100):
url = 'https://movie.douban.com/subject/26613692/comments?start='+str(i*20)
page_text = requests.get(url=url, headers=headers).text
#数据解析
tree = etree.HTML(page_text)
#标签对象
comments = tree.xpath('//p[@class=" comment-content"]/span/text()')
#print(comments)
fp = open('short_comments.txt', 'a', encoding='utf-8')
for comment in comments:
fp.write(comment)
print("第{}页爬取成功".format(i+1))
time.sleep(10) #设置睡眠时间
print("爬取成功")