python爬虫 豆瓣影评的爬取cookies实现自动登录账号
频繁的登录网页会让豆瓣锁定你的账号……
网页请求
使用cookies来实现的自动登录账号,这里的cookies因为涉及到账号我屏蔽了,具体的cookies获取方法直接可以让浏览器实现自动登录后,在网页请求信息中自己找到。
def askURL(url):
head = {
"User-Agent": "Mozilla / 5.0(Windows NT 10.0;WOW64) AppleWebKit / 537.36(KHTML, likeGecko) Chrome / 77.0.3865.90Safari / 537.36"
}
cookies ={
"Cookie":' ***********************'
}
# request = urllib.request.Request(url, headers=head)
# html = ""
# response = urllib.request.urlopen(request)
# html = response.read().decode("utf-8")
html = requests.get(url,cookies=cookies,headers=head)
print("网站返回成功")
return html.text
获取数据代码片段
再看豆瓣影评的时候,我发现他的所有评论我没有办法完全获取下来
他这里的评论我没理解错的话应该是31万+的评论,但是实际获取的时候在26页以后就什么都没有了。
re正则表达式
findCritic = re.compile(r'<span class="short">(.*?)</span>',re.S)
findUser = re.compile(r'<a href=.*? title="(.*?)">',re.S)
findScore = re.compile(r'<span class="(.*?)" title=')
具体方法
def getDate(base_url):
datelist = []
for i in range(0,25):
url = base_url +str(i*20)
html = askURL(url)
print("第{0}页".format(i+1))
soup = BeautifulSoup(html,"html.parser")
for item in soup.find_all('div',class_ = "comment-item"):
date = []
item = str(item)
#print(item)
user = re.findall(findUser,item)
date.append(user)
score = re.findall(findScore, item)[0]
date.append(score)
critic = re.findall(findCritic,item)
date.append(critic)
datelist.append(date)
return datelist
数据库保存
这里因为处理用户名中含有单引号的问题给我搞得有点傻,使用str.replace()先把用户名中的单引号变为空格,再将字符串格式的两边双引号变为单引号,最后才满足的数据库插入格式。
如果有大佬有更好的解决办法可以评论区告诉我。
def saveDate_DB(datelist,dbpath):
init_DB(dbpath)
conn = sqlite3.connect(dbpath)
cursor = conn.cursor()
for date in datelist:
for index in range(len(date)):
date[index] = str(date[index])
date[index] = date[index].replace("'"," ");
date[index] = date[index].replace('"', "'");
date[index] = '"'+str(date[index])+'"'
sql = '''
insert into bawangbieji(
author ,score ,critics
)
values(%s)'''%",".join(date)
#print(sql)
cursor.execute(sql)
conn.commit()
conn.close()
print("保存到数据库",dbpath)