我想从页面387中获取值https://house.leju.com/dl147961/

res = requests.get('https://house.leju.com/dl147961/')
soup = BeautifulSoup(res.text, 'lxml')
num = soup.find('h2', {'class':'clearfix'}).find('em', {'class':'new_font'}).text


令人惊讶的是,num628

即使只是复制并在浏览器中保存值,结果也是628

正确的方法是什么?

图片:python - 无法从网页复制值(value)-LMLPHP

最佳答案

这是因为他们使用的非标准字体使用字符数字。如果您查看该站点,您会发现实际上是628:

<em class="new_font">628</em>
但是,如果查看new_class的定义,您将看到它映射字符:

.new_font {
    font-family: "new_font","\5fae\8f6f\96c5\9ed1",Microsoft JhengHei,"\534e\6587\7ec6\9ed1",STHeiti,MingLiu,Serif!important;
}


值628仅仅表示等于3的字符索引6,等于8的字符索引2,依此类推。因此,您需要将该字体导入python,然后通过使用其索引来获取实值,就像通过数字引用ASCII字符一样。或者,您可以自己创建一个快速且肮脏的地图。只需右键单击检查并使用chrome开发人员工具即可动态更改em标记的值,以查看它会像我一样显示什么值。波纹管的映射:

1234567890 = 9802431765

在左侧,您会从右侧的请求中获得显示在网站上的方式的一位数字。因此,您需要将数字分成几个数字,然后根据我提供的地图转换每个数字。

所以628:

6->3
2->8
8->7


完整的工作示例:

import requests
from bs4 import BeautifulSoup

mapping ={
    "1":"9",
    "2":"8",
    "3":"0",
    "4":"2",
    "5":"4",
    "6":"3",
    "7":"1",
    "8":"7",
    "9":"6",
    "0":"5"
}
res = requests.get('https://house.leju.com/dl147961/')
soup = BeautifulSoup(res.text, 'lxml')
num = soup.find('h2', {'class':'clearfix'}).find('em', {'class':'new_font'}).text

result = ''
for d in num:
    result += mapping[d]

print(result)

关于python - 无法从网页复制值(value),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57194042/

10-10 01:21