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>'}
上一篇: Python|闭包&装饰器