我想从页面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
令人惊讶的是,
num
是628
!即使只是复制并在浏览器中保存值,结果也是
628
。正确的方法是什么?
图片:
最佳答案
这是因为他们使用的非标准字体使用字符数字。如果您查看该站点,您会发现实际上是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/