IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> Python爬长津湖豆瓣短评 -> 正文阅读

[Python知识库]Python爬长津湖豆瓣短评

刚学习爬虫不久,便想通过爬取最近很火的《长津湖》电影来练练手。

本文主要通过selenium库来进行,以chromedriver作为其与Chrome通信的载体。

?1.准备阶段

下载Chrome(谷歌)浏览器

安装对应版本的chromedriver,并将其添加至Python路径中

用cmd安装selenium、lxml、requests、time、re库

2.电影短评链接为:长津湖 短评长津湖短评https://movie.douban.com/subject/25845392/comments

获得源码的程序:

from selenium import webdriver
from lxml import etree
import requests
import pandas as pd
import time
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import re
driver=webdriver.Chrome()#启动chrome浏览器
url='https://movie.douban.com/subject/25845392/comments'#长津湖豆瓣短评链接
driver.get(url)    #获得源码
dom = etree.HTML(driver.page_source)

运行上述代码,会自动弹出《长津湖》短评窗口,如下图所示:

?2.获得信息程序

我主要爬取了用户名,评分、评论发布时间、短评正文、赞同数量、用户主页链接(为获取居住城市做准备),进入用户主页,可获得用户居住地址。

?

def get_web_data(dom = None, cookies = None, headers = None):
    names = dom.xpath('//div[@class="comment-item "]//span[@class="comment-info"]/a/text()')         # 获取用户名
    ratings = dom.xpath('//div[@class="comment-item "]//span[@class="comment-info"]/span[2]/@class') # 获取评分
    times = dom.xpath('//div[@class="comment-item "]//span[@class="comment-info"]/span[@class="comment-time "]/@title') # 获取评论发布时间
    message = dom.xpath('//div[@class="comment-item "]//div[@class="comment"]//span[@class="short"]/text()')  # 获取短评正文
    user_url = dom.xpath('//div[@class="comment-item "]//span[@class="comment-info"]/a/@href')  # 获取用户主页网址
    votes = dom.xpath('//div[@class="comment-item "]//div[@class="comment"]//span[@class="votes vote-count"]/text()') # 获取赞同数量
    cities = []
    load_times = []
    for i in user_url:
        web_data = requests.get(i, cookies = cookies, headers = header)
        dom_url = etree.HTML(web_data.text, etree.HTMLParser(encoding='utf-8'))
        address = dom_url.xpath('//div[@class="basic-info"]//div[@class="user-info"]/a/text()') # 根据用户主页网址来获取用户居住地
        load_time = dom_url.xpath('//div[@class="basic-info"]//div[@class="user-info"]/div[@class="pl"]/text()') # 获取用户入会时间
        cities.append(address)
        load_times.append(load_time)
        time.sleep(2)  #点击频率间隔两秒
    ratings = ['' if 'rating' not in i else int(re.findall('\d{2}', i)[0]) for i in ratings]  # 将评分数据整理为所需格式
    load_times = ['' if i == [] else i[1].strip()[:-2] for i in load_times]  # 将入会数据整理为所需格式
    cities = ['' if i == [] else i[0] for i in cities]
    data = pd.DataFrame({
        '用户名': names,
        '居住城市': cities,
        '加入时间': load_times,
        '评分': ratings,
        '发表时间': times,
        '短评正文': message,
        '赞同数量': votes
    })
    return data

4.登录豆瓣官网,设置cookies和header完成身份认证(登录之后可以获取500条数据)

cookies和header信息均在Network中,登陆后需刷新

cookies_str ='你的cookies复制粘贴到这噢~'
cookies = {}
for i in cookies_str.split(';'):  # 将cookies整理成所需格式
    k, v = i.split('=', 1)
    cookies[k] = v
header = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36",
        }       # 引号里边需替换为自己的User-Agent

5.爬取全部页面数据

# 对所有页面进行数据爬取操作,并对数据进行保存
all_data = pd.DataFrame()
wait = WebDriverWait(driver, 20)
while True:
    wait.until(  
        EC.element_to_be_clickable(   # 通过当前页最后一个“用户”按钮是否可以点击项条件确认网
#页是否已经加载进来
            (By.CSS_SELECTOR, '#comments > div:nth-child(20) > div.comment > h3 > span.comment-info > a') 
        )
    )
    dom = etree.HTML(driver.page_source, etree.HTMLParser(encoding='utf-8'))   # 网页源码解析,得到一个dom文件
    data = get_web_data(dom=dom, cookies=cookies, headers = header)
    all_data = pd.concat([all_data, data], axis=0)
    if driver.find_element_by_css_selector('#paginator > a.next')==[]:   # 判定“后页”按钮是否可以点击
        break#否则打破循环
    
    confirm_bnt = wait.until(
        EC.element_to_be_clickable(
            (By.CSS_SELECTOR, '#paginator > a.next')
        )
    )
    confirm_bnt.click()   # 执行翻页操作

获得数据如下图所示:

?6.保存数据

all_data.to_csv('E:\python\changjinhu\changjinhu.csv', index=None, encoding='gbk')   # 将数据以csv文件的方式写出

?本文代码可供学习使用,如有侵权联系即删,若有不足,欢迎评论区留言指出。

本人主要学习来源:登录 - 泰迪云课堂 - 大数据成就未来 - Powered By EduSoho

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-11-10 12:21:06  更:2021-11-10 12:23:05 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 22:27:59-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码