无法从网页复制价值

时间:2019-07-25 03:51:52

标签: python request

我想从页面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

正确的方法是什么?

图:enter image description here

1 个答案:

答案 0 :(得分:1)

这是因为它们使用的非标准字体使用字符数字。如果您查看该站点,您会发现实际上是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仅表示字符索引6等于3,字符索引2等于8,依此类推。因此,您需要将此字体导入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)