爬蟲---爬取豆瓣網評論內容


  這段時間肯定經常聽到一句話“我命由我不由天”,沒錯,就是我們國產動漫---哪吒,今天我們通過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()

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM