selenium爬取TapTap评论

上一篇写的beautifulsoup和request爬取出的结果有误。首先,TapTap网页以JS格式解析,且评论并没有“下一页”,而是每次加载到底部就要进行等待重新加载。我们需要做的,是模仿浏览器的行为,所以这里我们用Selenium的方式爬取。

下载ChromeDriver

ChromeDriver作用是给Pyhton提供一个模拟浏览器,让Python能够运行一个模拟的浏览器进行网页访问 用selenium进行鼠标及键盘等操作获取到网页真正的源代码。

官方下载地址:https://sites.google.com/a/chromium.org/chromedriver/downloads

注意,一定要下载自己chrome浏览器对应版本的驱动,根据自己的电脑版本下载对应系统的文件

以Windows版本为例,将下载好的chromedriver_win64.zip解压得到一个exe文件,将其复制到Python安装目录下的Scripts文件夹即可

爬虫操作

首先导入所需库

import pandas as pd
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

滚动到底部的驱动

def scroll_to_bottom(driver):
    # 使用 JavaScript 模拟滚动到页面底部
    driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")

爬取评论

def get_taptap_reviews(url, max_reviews=50):
    reviews = []
    driver = webdriver.Chrome()  # 需要安装 Chrome WebDriver,并将其路径添加到系统环境变量中
    driver.get(url)

    try:
        # 等待评论加载完成
        WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.CLASS_NAME, "text-box__content")))
        
        last_review_count = 0
        while len(reviews) < max_reviews:
            review_divs = driver.find_elements(By.CLASS_NAME, 'text-box__content')
            for review_div in review_divs[last_review_count:]:
                review = review_div.text.strip()
                reviews.append(review)
                if len(reviews) >= max_reviews:
                    break
            
            if len(reviews) >= max_reviews:
                break
            
            last_review_count = len(review_divs)

            # 模拟向下滚动页面
            scroll_to_bottom(driver)
            # 等待新评论加载
            time.sleep(10)  # 等待时间也可以根据实际情况调整,确保加载足够的评论
            
            # 检查是否有新评论加载
            new_review_divs = driver.find_elements(By.CLASS_NAME, 'text-box__content')
            if len(new_review_divs) == len(review_divs):
                break  # 没有新评论加载,退出循环

    finally:
        driver.quit()

    return reviews[:max_reviews]

将评论输出到excel中

def save_reviews_to_excel(reviews, filename='taptap.xlsx'):
    df = pd.DataFrame(reviews, columns=['comment'])
    df.to_excel(filename, index=False)

main

if __name__ == "__main__":
    url = "https://www.taptap.cn/app/247283/review"
    max_reviews = 50
    reviews = get_taptap_reviews(url, max_reviews)
    save_reviews_to_excel(reviews)

查看输出的结果

代码汇总

import pandas as pd
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

def scroll_to_bottom(driver):
    # 使用 JavaScript 模拟滚动到页面底部
    driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")

def get_taptap_reviews(url, max_reviews=50):
    reviews = []
    driver = webdriver.Chrome()  # 需要安装 Chrome WebDriver,并将其路径添加到系统环境变量中
    driver.get(url)

    try:
        # 等待评论加载完成
        WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.CLASS_NAME, "text-box__content")))
        
        last_review_count = 0
        while len(reviews) < max_reviews:
            review_divs = driver.find_elements(By.CLASS_NAME, 'text-box__content')
            for review_div in review_divs[last_review_count:]:
                review = review_div.text.strip()
                reviews.append(review)
                if len(reviews) >= max_reviews:
                    break
            
            if len(reviews) >= max_reviews:
                break
            
            last_review_count = len(review_divs)

            # 模拟向下滚动页面
            scroll_to_bottom(driver)
            # 等待新评论加载
            time.sleep(10)  # 等待时间也可以根据实际情况调整,确保加载足够的评论
            
            # 检查是否有新评论加载
            new_review_divs = driver.find_elements(By.CLASS_NAME, 'text-box__content')
            if len(new_review_divs) == len(review_divs):
                break  # 没有新评论加载,退出循环

    finally:
        driver.quit()

    return reviews[:max_reviews]

def save_reviews_to_excel(reviews, filename='taptap.xlsx'):
    df = pd.DataFrame(reviews, columns=['comment'])
    df.to_excel(filename, index=False)

if __name__ == "__main__":
    url = "https://www.taptap.cn/app/247283/review"
    max_reviews = 50
    reviews = get_taptap_reviews(url, max_reviews)
    save_reviews_to_excel(reviews)

 

 

 

包括APP爬虫、数据清洗、pyecharts可视化、pytorch框架下LSTM模型情感分析 爬虫(Web Crawler)是一种自动化程序,用于从互联网上收集信息。其主要功能是访问网页、提取数据并存储,以便后续分析或展示。爬虫通常由搜索引擎、数据挖掘工具、监测系统等应用于网络数据抓取的场景。 爬虫的工作流程包括以下几个关键步骤: URL收集: 爬虫从一个或多个初始URL开始,递归或迭代地发现新的URL,构建一个URL队列。这些URL可以通过链接分析、站点地图、搜索引擎等方式获取。 请求网页: 爬虫使用HTTP或其他协议向目标URL发起请求,获取网页的HTML内容。这通常通过HTTP请求库实现,如Python中的Requests库。 解析内容: 爬虫对获取的HTML进行解析,提取有用的信息。常用的解析工具有正则表达式、XPath、Beautiful Soup等。这些工具帮助爬虫定位和提取目标数据,如文本、图片、链接等。 数据存储: 爬虫将提取的数据存储到数据库、文件或其他存储介质中,以备后续分析或展示。常用的存储形式包括关系型数据库、NoSQL数据库、JSON文件等。 遵守规则: 为避免对网站造成过大负担或触发反爬虫机制,爬虫需要遵守网站的robots.txt协议,限制访问频率和深度,并模拟人类访问行为,如设置User-Agent。 反爬虫应对: 由于爬虫的存在,一些网站采取了反爬虫措施,如验证码、IP封锁等。爬虫工程师需要设计相应的策略来应对这些挑战。 爬虫在各个领域都有广泛的应用,包括搜索引擎索引、数据挖掘、价格监测、新闻聚合等。然而,使用爬虫需要遵守法律和伦理规范,尊重网站的使用政策,并确保对被访问网站的服务器负责。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值