鱼C论坛

 找回密码
 立即注册
查看: 2255|回复: 14

selenium获取源码是乱码

[复制链接]
发表于 2023-6-27 18:19:41 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
代码如下:
from selenium import webdriver

driver = webdriver.Chrome()
driver.get('https://ai.hxkj.vip/')

html_source = driver.page_source

print(html_source)
driver.quit()

selenium相对于requests的优点之一是不会出现乱码,但这到底是什么情况

问过chatgpt,各种办法都没用
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-6-27 18:40:42 | 显示全部楼层
没有乱码呀

Snipaste_2023-06-27_18-40-09.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-6-27 19:00:00 | 显示全部楼层


我把源码保存成html文件是这样子:

                               
登录/注册后可看大图

你可以把这个与开发者工具里看到的源码对比,差别很大
求教
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-6-27 19:07:56 | 显示全部楼层
青出于蓝 发表于 2023-6-27 19:00
我把源码保存成html文件是这样子:

你可以把这个与开发者工具里看到的源码对比,差别很大

你是怎么保存的?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-6-27 19:31:11 | 显示全部楼层
isdkz 发表于 2023-6-27 19:07
你是怎么保存的?

with open(1.html,’w’) as a:
    a.write……
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-6-27 19:42:17 | 显示全部楼层
青出于蓝 发表于 2023-6-27 19:31
with open(1.html,’w’) as a:
    a.write……
with open("1.html", 'w', encoding='utf-8') as f:
    f.write(

点评

抱歉,有点事没时间研究了,明天再看看  发表于 2023-6-27 22:15
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-6-27 19:43:51 | 显示全部楼层
本帖最后由 isdkz 于 2023-6-27 19:55 编辑
青出于蓝 发表于 2023-6-27 19:31
with open(1.html,’w’) as a:
    a.write……


因为这个网站的代码在元数据那里指定的编码为 utf-8,所以浏览器会以 utf-8 编码来解码,但是你在windows中写入文件不加编码的时候默认是 gbk 编码,因为编码不一致所以导致了乱码

Snipaste_2023-06-27_19-40-30.png

你可以先从元数据中获取编码再以指定编码写入文件:
import re

from selenium import webdriver

driver = webdriver.Chrome()
driver.get('https://ai.hxkj.vip/')

html_source = driver.page_source

pattern = '<meta charset="(.*?)">'
result = re.search(pattern, html_source)
encoding = result.group(1) if result else result

with open('1.html', 'w', encoding=encoding) as a:
        a.write(html_source)
driver.quit()

点评

抱歉,有点事没时间研究了,明天再看看  发表于 2023-6-27 22:15
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-6-28 09:12:44 | 显示全部楼层
乱码无非就是编码问题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-6 23:16:23 | 显示全部楼层
好了吗,只求

                               
登录/注册后可看大图
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-5-5 10:01:25 | 显示全部楼层
@FishC
import requests,json
headers = {
        'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36'}
url='http://www.6002255.com/'
data={
        "input": '最后一页',#input('歌曲名:'),
        "filter": "name",
        "type": "lizhi",
        "page": "1"
}
response=json.loads(requests.post(url,headers=headers,data=data))
print(response)



Traceback (most recent call last):
  File "C:\Users\shuoguo-win10\Desktop\333.py", line 11, in <module>
    response=json.loads(requests.post(url,headers=headers,data=data))
  File "C:\Users\shuoguo-win10\AppData\Local\Programs\Python\Python39\lib\json\__init__.py", line 339, in loads
    raise TypeError(f'the JSON object must be str, bytes or bytearray, '
TypeError: the JSON object must be str, bytes or bytearray, not Response

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

使用道具 举报

发表于 2024-5-5 10:01:37 | 显示全部楼层
青出于蓝 发表于 2024-05-05 10:01
@FishC
import requests,json
headers = {
        ...


你的代码出错的原因是`requests.post()`返回的是一个`Response`对象,而`json.loads()`方法要求传入的参数是一个字符串、字节或字节数组类型的JSON对象。你需要将`Response`对象转换成字符串,然后再解析成JSON对象。

以下是修正后的代码:
import requests
import json

headers = {
    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36'
}

url = 'http://www.6002255.com/'

data = {
    "input": '最后一页',  # input('歌曲名:'),
    "filter": "name",
    "type": "lizhi",
    "page": "1"
}

response = requests.post(url, headers=headers, data=data)
response_text = response.text
response_json = json.loads(response_text)

print(response_json)

这样就能够正常解析JSON对象了。注意,如果返回的是字节类型的内容,则需要使用`response.content`进行解析。

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

使用道具 举报

 楼主| 发表于 2024-5-5 10:02:39 | 显示全部楼层
FishC 发表于 2024-5-5 10:01
你的代码出错的原因是`requests.post()`返回的是一个`Response`对象,而`json.loads()`方法要求传入的 ...

Traceback (most recent call last):
  File "C:\Users\shuoguo-win10\Desktop\333.py", line 19, in <module>
    response_json = json.loads(response_text)
  File "C:\Users\shuoguo-win10\AppData\Local\Programs\Python\Python39\lib\json\__init__.py", line 346, in loads
    return _default_decoder.decode(s)
  File "C:\Users\shuoguo-win10\AppData\Local\Programs\Python\Python39\lib\json\decoder.py", line 337, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "C:\Users\shuoguo-win10\AppData\Local\Programs\Python\Python39\lib\json\decoder.py", line 355, in raw_decode
    raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-5-5 10:02:53 | 显示全部楼层
青出于蓝 发表于 2024-05-05 10:02
Traceback (most recent call last):
  File "C:\Use ...


这个错误通常是由于返回的内容不是有效的JSON导致的。可以尝试检查一下返回的内容是否包含有效的JSON数据。

你可以使用以下代码进行调试,输出返回的文本内容,查看其中是否包含JSON数据:
import requests

headers = {
    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36'
}

url = 'http://www.6002255.com/'

data = {
    "input": '最后一页',
    "filter": "name",
    "type": "lizhi",
    "page": "1"
}

response = requests.post(url, headers=headers, data=data)
response_text = response.text

print(response_text)

请确保这个文本内容是JSON格式的数据,否则如果返回的不是有效的JSON,你需要检查请求参数、请求头、URL等是否正确,并根据具体的接口文档来进行调整和处理。

希望这个能够帮到你!

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-15 16:50

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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