鱼C论坛

 找回密码
 立即注册
查看: 71|回复: 1

Selenium爬取网易云评论

[复制链接]
发表于 3 天前 | 显示全部楼层 |阅读模式
2鱼币
大佬们,本人萌新一枚,最近跟着小甲鱼老师的python爬虫课程爬取网易云评论时,发现request库不大好使了,爬出来会报错:{"msg":"参数错误","code":400},请问这是什么原因导致的错误呢?莫非是网易云的params和encSEcKey参数加密了?代码如下,感觉代码应该没啥问题呢。
import requests

def get_comments(url):
    name_id = url.split("=")[1]
    
    headers = {"user-agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36",
                     "referer":"https://music.163.com/song?id={}".format(name_id),
                     "origin":"https://music.163.com"}

    params=
"PaXPWdb3bwNmS9m9VvBhueMpH6Lg7Xr2x2pU0hAv3M5Luh5ff/HfMArdNMJbSu9T3l6KdCMWR5/4oFDcGS09vxJOcHDB/kFUQ8cftlgeiSivjTE0YMYWNXifGuBARt5GvJlS5COncvZKZhDyov+IKuO/dRWGDbzoOdn+tGjRsXTsozm3A/eKk9rUVqLf5oELBfwVx5D2pJR3diMrrug7+sG64tAZfjQMoYw8gEmxnfLyUGqOaVlEELVZJun3Ue0gDSgCOCuuLZGHd3zttqPdlg=="
    encSEcKey = "7bbe72cb0f192959ff6bd3809cd492a9e274eef1b05c4c7cadb451a6abebca7fae6e0ea60d1842c19757e931b4996d16cff09201a112d6b95cf349502338662a7ca9fa0ad2a67e07bb15cb2dcf7ec732053fc3a41302d69be0a528558920beaea595fa3ba908f08b9fac0948cde63f6eeff582c6555d17388bf2a954d71af5b2"
    
    data = {"params":params,"encSEcKey":encSEcKey}

    target_url = "https://music.163.com/api/comment/resource/comments/get?csrf_token="
    
    res = requests.post(target_url, headers=headers,data=data)
    return res

def main():
    url = input("请输入链接地址:")
    res = get_comments(url)
    #print(res.status_code)

    with open("res.txt","w",encoding="utf-8") as f:
        f.write(res.text)

if __name__ == "__main__":
    main()
然后我又尝试使用selenium库来实现,代码如下:
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By

service=Service('/usr/local/bin/chromedriver')
driver = webdriver.Chrome(service=service)
target_url = 'https://music.163.com/#/song?id=4466775'
driver.get(target_url)
#切换到嵌套网页
driver.switch_to.frame(0)
#css选择器 根据标签属性提取内容
lis = driver.find_elements(By.CSS_SELECTOR,'.itm')
for each in lis:
    try:
        comment_elements = each.find_elements(By.CSS_SELECTOR,'.cnt')
        for comment_element in comment_elements:
            comment = comment_element.text
            print(comment)
    except Exception as e:
        print("异常:",e)
driver.close()
然后就成功的爬到了评论,但是贼卡,要等好久才出来。所以这个是不是意味着selenium比request好用呀?这两个库的优缺点分别是啥捏?

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 3 天前 | 显示全部楼层
在爬取动态数据的网站时,`requests` 和 `selenium` 各有优缺点。你遇到的问题和选择合适的工具之间是有联系的。以下是两者的优缺点:

### Requests 库:
#### 优点:
- **速度快**:适用于获取静态数据。
- **资源消耗低**:相比 Selenium,占用的系统资源更少。

#### 缺点:
- **限制高**:对于动态加载的数据、JavaScript渲染的页面,获取难度大。
- **加密参数难处理**:需要手动处理复杂参数和加密。

### Selenium 库:
#### 优点:
- **动态页面处理**:可以处理JavaScript渲染加载的数据。
- **操作直观**:模拟真实浏览器行为,易于处理页面交互。

#### 缺点:
- **速度慢**:因为模拟完整浏览器,处理较慢。
- **资源消耗高**:需要更多的系统资源(CPU、内存)。

### 关于你的情况:
1. **Requests** 遇到加密的参数时,需要逆向分析加密逻辑(可能需要使用浏览器中的开发者工具),因此难度较高。
2. **Selenium** 能够成功获取评论是因为它可以完全渲染网站,但是速度和效率不如 Requests。

### 建议:
- 如果网站提供的内容主要通过 JavaScript 加载(如评论、动态内容),建议使用 Selenium 以获取这些数据,即使速度较慢。
- 如果可能自行解密或绕过某些参数加密,可以将解密逻辑应用到 Requests 中以提高速度。
- 使用时结合实际需求和环境资源情况选择合适的工具。如果要对速度进行优化,可以考虑多线程或异步处理。

希望帮助你更好地了解这两个库,并根据具体需求做出选择。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-23 02:38

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表