大佬们,本人萌新一枚,最近跟着小甲鱼老师的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好用呀?这两个库的优缺点分别是啥捏?
在爬取动态数据的网站时,`requests` 和 `selenium` 各有优缺点。你遇到的问题和选择合适的工具之间是有联系的。以下是两者的优缺点:
### Requests 库:
#### 优点:
- **速度快**:适用于获取静态数据。
- **资源消耗低**:相比 Selenium,占用的系统资源更少。
#### 缺点:
- **限制高**:对于动态加载的数据、JavaScript渲染的页面,获取难度大。
- **加密参数难处理**:需要手动处理复杂参数和加密。
### Selenium 库:
#### 优点:
- **动态页面处理**:可以处理JavaScript渲染加载的数据。
- **操作直观**:模拟真实浏览器行为,易于处理页面交互。
#### 缺点:
- **速度慢**:因为模拟完整浏览器,处理较慢。
- **资源消耗高**:需要更多的系统资源(CPU、内存)。
### 关于你的情况:
1. **Requests** 遇到加密的参数时,需要逆向分析加密逻辑(可能需要使用浏览器中的开发者工具),因此难度较高。
2. **Selenium** 能够成功获取评论是因为它可以完全渲染网站,但是速度和效率不如 Requests。
### 建议:
- 如果网站提供的内容主要通过 JavaScript 加载(如评论、动态内容),建议使用 Selenium 以获取这些数据,即使速度较慢。
- 如果可能自行解密或绕过某些参数加密,可以将解密逻辑应用到 Requests 中以提高速度。
- 使用时结合实际需求和环境资源情况选择合适的工具。如果要对速度进行优化,可以考虑多线程或异步处理。
希望帮助你更好地了解这两个库,并根据具体需求做出选择。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
|