本文记录使用request,以及正则表达式re爬取影评的过程,关于request的安装,可以使用:pip3 install requests
1)登录。注册账号,因为要爬取所有的短评内容的话,必须要登录才可以,这也算是一种反爬虫的手段,注册账号之后,我们首先要解决的就是登录问题。
在获取登录的Url的时候,我们故意输入一个错的账号和密码,就能轻松拿到这个Url以及相应的请求参数了:https://accounts.douban.com/j/mobile/login/basic
拿到这些信息之后,就是发请求,登录了,代码如下:
def login_douban():
try:
login_url = 'https://accounts.douban.com/j/mobile/login/basic'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; Win64; x64; rv:70.0) Gecko/20100101 Firefox/70.0',
'Referer': 'https://accounts.douban.com/passport/login_popup?login_source=anony'
}
data = {
'name': '你的用户名',
'password': '你的密码',
'remember': 'false'
}
response = session.post(login_url, headers=headers, data=data)
if response.status_code == 200:
return response.text
return None
except RequestException:
print('登录失败')
return None
2)爬取。登录成功之后,就可以访问《少年的你》的短评页,https://movie.douban.com/subject/30166972/comments?status=P
,然后下拉到最后,通过翻页,我们会看到一个有明显规律的Url:https://movie.douban.com/subject/30166972/comments?start=0&limit=20&sort=new_score&status=P
注意里边的参数,start=0&limit=20,意思就是从第0条短评开始,请求20条,也就是第0条~第20条的短评内容,那么就可以定义一个方法,来爬取短评内容,代码如下:着色部分是重点,我们用request.Session()来保存会话状态
session = requests.Session()
def get_comment_one_page(page=0):
start = int(page * 20)
comment_url = 'https://movie.douban.com/subject/30166972/comments?start=%d&limit=20&sort=new_score&status=P' % start
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; Win64; x64; rv:70.0) Gecko/20100101 Firefox/70.0',
}
try:
response = session.get(comment_url, headers=