使用正则表达式爬取雪球网页中的市盈率-(代码中变量:shiyinglv)属性时如何得到正确值?

使用正则表达式爬取雪球网页中的市盈率-(代码中变量:shiyinglv)属性时如何得到正确值?

问题描述:

各位大侠,本人在使用正则表达式爬取雪球网页中的市盈率 -(代码中变量:shiyinglv) 属性时无法得到正确值,始终得到空列表,怀疑是正则表达式中有中文导致(代码中倒数第三行)

shiyinglv = re.findall('市盈率(动): <span>(.*?)</span>',html.decode('utf-8'))

另外两个变量 name,price 均可正确爬取(对应的正则表达式中未使用中文)

求各位大侠不吝赐教,应该对获得变量 shiyinglv 的代码如何做改进才能得到正确的数值?

需要爬取的网页如下:
xueqiu.com/S/SH601318
程序运行结果为:
[‘中国平安 (SH:601318)’] [‘85.18’] []
其中第三个值为 shiyinglv,但始终得到的为空

import requests
import re
headers = {
‘User-Agent’: ‘Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.182 Safari/537.36’
}
def getHTMLText(url):

try:

    r = requests.get(url, timeout = 30,headers=headers)

    r.raise_for_status()

    r.encoding = r.apparent_encoding

    print(r.encoding)

    return r.content

except:

    return ""
def getStockInfo(url):

html = getHTMLText(url)

name = re.findall('<div class="stock-name">(.*?)</div>',html.decode('utf-8'))

price = re.findall('<div class="stock-current"><strong>¥(.*?)</strong>',html.decode('utf-8'))

shiyinglv = re.findall('市盈率(动): <span>(.*?)</span>',html.decode('utf-8'))

print(name,price,shiyinglv)
getStockInfo(‘xueqiu.com/S/SH601318')

 

 将括号转义一下。

    shiyinglv = re.findall('市盈率\(动\):<span>(.*?)</span>', html.decode('utf-8'))