selenium获取源码是乱码
代码如下:from selenium import webdriverdriver = webdriver.Chrome()
driver.get('https://ai.hxkj.vip/')
html_source = driver.page_source
print(html_source)
driver.quit()
selenium相对于requests的优点之一是不会出现乱码,但这到底是什么情况{:10_266:}
问过chatgpt,各种办法都没用 没有乱码呀
isdkz 发表于 2023-6-27 18:40
没有乱码呀
我把源码保存成html文件是这样子:
https://xxx.ilovefishc.com/album/202306/27/185857yctmrm18kwdt77xm.png
你可以把这个与开发者工具里看到的源码对比,差别很大
求教 青出于蓝 发表于 2023-6-27 19:00
我把源码保存成html文件是这样子:
你可以把这个与开发者工具里看到的源码对比,差别很大
你是怎么保存的? isdkz 发表于 2023-6-27 19:07
你是怎么保存的?
with open(1.html,’w’) as a:
a.write…… 青出于蓝 发表于 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( 本帖最后由 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 编码,因为编码不一致所以导致了乱码
你可以先从元数据中获取编码再以指定编码写入文件:
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()
乱码无非就是编码问题 好了吗,只求https://i.imgtg.com/2023/06/18/OTpTnF.png{:10_254:} @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
青出于蓝 发表于 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 小助理,如未能正确解答您的问题,请继续追问。 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)
青出于蓝 发表于 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 小助理,如未能正确解答您的问题,请继续追问。
页:
[1]