python 爬虫 动态网页反爬虫js加密破解思路

python 爬虫 动态网页反爬虫js加密破解思路

前言

最近接了一个单子,需求很简单:爬一个公告目录网站,并且检测公告中是否存在关键词。

听见需求马上就接了,口口声声保证1天以内交单,然而,开始分析网站才发现自己有多么天真。

分析

网站排版很复古,并且用jsp写的,这代表网页是动态生成的,如果直接用requests库发送请求只会获得一些js代码。
打开F12发现有反调试,本人不是专业写爬虫的,对于js解密无能为力,但我也不需要对js解密,有更便捷的方法。反调试
元素
有反调试但不影响我查看元素,简单观察了一下需要爬的元素构造,轻松写出CSS选择器表达式:

标题栏 td[align=‘left’] > span
时间 td[width=‘15%’]

我采用bs4库,方便快捷。

items = soup.select("td[align='left'] > span")
days = soup.select("td[width='15%']")

含标题的元素属性中就有公告正文url,通过url遍历公告正文就可以检测正文中是否含有关键词。
至此项目有了一条明确的思路,接下来解决反爬虫问题。
我们完全没必须去分析那又臭又长的js代码做js解密,完全可以用selenium库模拟浏览器,几乎可以绕过所有反爬虫。
刚开始我首先采用了Edge浏览器驱动,打开网页后发现为空白页,就知道网站做反模拟了。
在查阅资料后,在github上找到一个三方库:undetected_chromedriver,顾名思义反检测谷歌驱动,能够成功绕过网站的反模拟。

该库可以通过 pip install undetected_chromedriver 进行安装

import undetected_chromedriver as uc
options = uc.ChromeOptions()
driver = uc.Chrome(options=options)

def get_html(url, wait_time):
    print("正在爬取url:",url)
    # 反检测驱动
    driver.get(url)
    #等待网页加载
    time.sleep(wait_time)
    html = driver.page_source
    #driver.close()
    return html

通过以上代码我们就可以获得网站源代码html,传给bs4就能寻找我们需要的元素了。

html = get_html(url + str(page), page_wait_time)
soup = BeautifulSoup(html, "html.parser")
items = soup.select("td[align='left'] > span")
days = soup.select("td[width='15%']")

总结

对于这种js加密+动态网站+反调试的网站,这也算是一个行之有效的思路。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

很大园霖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值