這段時間肯定經常聽到一句話“我命由我不由天”,沒錯,就是我們國產動漫---哪吒,今天我們通過python還有上次寫的pyquery庫來爬取豆瓣網評論內容
爬取豆瓣網評論
1、找到我們想要爬取的電影---小哪吒
2、查看影片評論
點擊查看我們的影評,發現只能查看前200個影評,這里就需要登錄了
分析出來全部影評的接口地址
好巧用到了上次寫的通過requests登錄豆瓣網,然后通過session會話訪問評論內容-----post請求登錄豆瓣網
# coding:utf-8 import requests # 登錄請求地址 s = requests.session() url = 'https://accounts.douban.com/j/mobile/login/basic' # 請求頭 headers = { "User-Agent":"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36" } # body數據 data = { 'name':"xxxxx", # 賬號 "password":"xxxx", # 密碼 "remember":"false" } # 發送請求 r = s.post(url,headers=headers,data=data) # 全部評論內容 url2 = 'https://movie.douban.com/subject/26794435/comments?start=20&limit=20&sort=new_score&status=P' r2 = s.get(url2,headers=headers).content
3、通過pyquery解析html
導入pyquery解析html內容,分析html數據
評論人的在 class =‘comment-info’下的a標簽中;
影評內容在class=‘short’中
4、提取html上我們想要的內容
已經分析出來我們想要的數據在哪里,那么接下來就是提取數據了
# 解析html doc = pq(r2) items = doc('.comment-item').items() # 循環讀取信息 for i in items: # 評論昵稱 name = i('.comment-info a').text() print(name) # 評論內容 content = i('.short').text() print(content)
5、循環讀取全部評論並且寫入txt文件中
這個地方用到的知識點寫入應該不用在具體說了;
循環讀取全部評論就要查看分頁情況了。找到2個url進行對比就可以看出來了
url1:https://movie.douban.com/subject/26794435/comments?status=P
url2:https://movie.douban.com/subject/26794435/comments?start=20&limit=20&sort=new_score&status=P
通過對比我們發現分頁通過start這個參數進行控制,這次我們通過while進行控制分頁內容
import requests from pyquery import PyQuery as pq import time import random s = requests.session() def data_html(): url = 'https://accounts.douban.com/j/mobile/login/basic' headers = { "User-Agent":"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36" } data = { 'name':"1", "password":"xxxxx", "remember":"false" } r = s.post(url,headers=headers,data=data,verify = False) if '安靜' in r.text: print('登錄成功') else: print('登錄失敗') def data_shuju(count=0): print('開始爬取第%d頁' % int(count)) start = int(count * 20) headers = { "User-Agent":"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36" } url2 = 'https://movie.douban.com/subject/26794435/comments?start=%d&limit=20&sort=new_score&status=P' %(start) r2 = s.get(url2,headers=headers).content doc = pq(r2) items = doc('.comment-item').items() for i in items: name = i('.comment-info a').text() if not name: return 0 content= i('.short').text() with open('12.txt','a+',encoding='utf-8')as f: f.write('{name}:\n{pinglun}\n\n'.format(name=name,content=content)) return 1
def data_data():
data_html()
count = 0
while data_shuju(count):
count += 1
time.sleep(random.random() * 3)
print('爬取完畢')
data_data()