欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

python如何提取js 内容 及遇到html转义符如何自动转义(pythoh3 ''<abc>' )

程序员文章站 2022-07-12 23:48:57
...

先描述下问题:

我想获取今日头条内容但是发现查看源码网页内容全是js内容。如果用审查元素则是完整的html。看了好多网上教程说结合:python+selenium 可以看到审查元素内容。我试了下发现效率太慢,前期也遇到很多坑,最后无奈放弃。最后*去尝试去js中提取内容。以下是关于提取js内容的大致方法。

1、使用python request 请求得到网页


response = requests.get('https://www.toutiao.com/a6561633684447822339/', headers = headers)
soup = BeautifulSoup(response.text,"lxml")
注意:要包含请求headers,不然无法获得内容。

2、通过 python re正则模块提取网页js内容

document=re.compile('<script>(.*?)</script>',re.S)
data=document.findall(html1)[4]

注:得到的内容列表,根据下标找到想要的内容

得到用正则提取出来内容 HTML 经常会混杂有转移字符,这些字符我们需要把它转义成真正的字符。

3、Python 反转义字符串

用 Python 来处理转义字符串有多种方式,而且 py2 和 py3 中处理方式不一样,在 python2 中,反转义串的模块是 HTMLParser

# python2
import HTMLParser
>>> HTMLParser().unescape('a=1&b=2')
'a=1&b=2'

Python3 把 HTMLParser 模块迁移到 html.parser

# python3
>>> from html.parser import HTMLParser
>>> HTMLParser().unescape('a=1&b=2')
'a=1&b=2'

到 python3.4 之后的版本,在 html 模块新增了 unescape 方法。

# python3.4
>>> import html
>>> html.unescape('a=1&b=2')
'a=1&b=2'

本人用的是最后一种方法HTMLParser.unescape 方法在 Python3.4 就已经被废弃掉不推荐使用,意味着之后的版本有可能会被彻底移除。

4、总结

以上就是通过解析js的到标题内容的方法思路。中间还用到正则当中的str.split(),和str.replace()方法。

这里是我获取的两个字段 用字典存起来

content={
    "title":title,
    "newstext":newtext,
}

结果:


{'title': '这三类人即使缴够了15年社保也领不到养老金,当心!', 'newtext': '<div><p>在这个焦虑横行的时代,“老无所依”成为越来越多人心中的隐忧。养老金作为绝大多数老年人的主要收入,承载着很多重要的意义。不过要注意的是,有三类人,就算缴纳够15年社保了,也一样领不到养老金,我们一起来看看。</p><div class="pgc-img"><img src="http://p1.pstatp.com/large/pgc-image/15277477721322594ca14d6" width="1281" height="720" alt="这三类人即使缴够了15年社保也领不到养老金,当心!" inline="0"><p class="pgc-img-caption"></p></div><p><strong>第一类:尚未达到退休年龄的人</strong></p><p>要想按月领取养老金,必须要累计缴满15年的养老保险,并且要达到法定的退休年龄,男性60岁,女性工人50岁,*55岁,才可以办理退休。这二者缺一不可。而且退休年龄和参保人是否有工作无关,就算没有工作,也必须达到国家法定退休年龄方可退休。</p><div class="pgc-img"><img src="http://p3.pstatp.com/large/pgc-image/15277479019749696a43688" width="1280" height="720" alt="这三类人即使缴够了15年社保也领不到养老金,当心!" inline="0"><p class="pgc-img-caption"></p></div><p><strong>第二类:退休了但没有进行养老金认证的人</strong></p><p>大家要记住一点,并不是办理完退休手续每年就能领取退休金,根据国家政策规定,每年退休人员都要到当地的社保局进行一次生存认证进行养老认证,不认证很可能导致您的养老金停发!需要证明领取养老金的老年居民还健在、符合继续领取养老金的条件。因为死亡后会给予一次性赔偿抚恤金,就不再发放养老金了!</p><div class="pgc-img"><img src="http://p9.pstatp.com/large/pgc-image/1527747996096ffad1381c0" width="1281" height="720" alt="这三类人即使缴够了15年社保也领不到养老金,当心!" inline="0"><p class="pgc-img-caption"></p></div><p><strong>第三类人:异地缴纳社保, 但不符合社保所在地领取养老金规定的人</strong></p><p>随着经济的发展, 在不同地区流动就业的人也越来越多,不同城市之间的养老金领取条件也不一样。如果参保人不符合社保缴纳地的领取条件,是无法领取养老金的,那么只能回到原户籍地所在地领取。</p><div class="pgc-img"><img src="http://p9.pstatp.com/large/pgc-image/15277486351153ccc92a9f5" width="1281" height="720" alt="这三类人即使缴够了15年社保也领不到养老金,当心!" inline="0"><p class="pgc-img-caption"></p></div><h1>哪些情况会暂停发放养老金</h1><p>一、确定去世的退休人员。</p><p>二、被判有刑法收监执行的退休人员。</p><p>三、没有在规定期限进行养老金认证,或认证材料无效的退休人员。</p><p>四、失踪超过6个月,失踪人亲属或利害关系人申报失踪,户口登记机关暂时注销户口的退休人员。</p><p>五、法律规定的其他情况。</p></div>'}