当前位置:   article > 正文

python 爬虫之js逆向爬虫详解_python爬虫js逆向

python爬虫js逆向

随着网站前端技术的不断发展,越来越多的网站采用JS进行渲染,并加上了一些反爬机制,导致传统的爬虫技术有些力不从心。本文将为大家介绍如何进行JS逆向爬虫,并且不少于1000字。

一、JS逆向爬虫的介绍

JS逆向是一种分析反爬机制的行为,通过分析反爬机制如何加密、混淆和模拟JS代码的执行,使之能够成功处理并渲染网页。由于JS逆向的方式需要进行复制粘贴,因此开发过程中需要耗费一定的时间和精力。

在Python上,我们可以使用Requests和Selenium等库来获取页面元素或模拟人类操作。Requests库是一种强大、简洁的HTTP请求库。而Selenium是一个自动化测试框架,用于模拟用户在浏览器中的操作。过程如下:

使用Requests

  1. import requests
  2. # 获取页面
  3. r = requests.get(url)
  4. html = r.content
  5. # 对页面进行解析
  6. # ...
  7. 使用Selenium
  8. from selenium import webdriver
  9. # 创建浏览器对象
  10. browser = webdriver.Chrome()
  11. browser.get(url)
  12. # 获取页面
  13. html = browser.page_source
  14. # 对页面进行解析
  15. # ...
  16. # 关闭浏览器
  17. browser.quit()


二、JS逆向的原理

当浏览器使用JS渲染页面时,它会从客户端下载HTML文件并下载相关的JS库。当完成下载之后,浏览器会自动执行所有与页面相关的JS代码,根据代码来生成和修改HTML元素的DOM结构。这意味着,我们需要模拟并执行JS代码轨迹,对页面元素进行解析,即可获取页面信息。

三、如何进行JS逆向爬虫

在进行JS逆向之前,我们首先需要对目标网页进行分析,找出JS代码的执行顺序以及可能的加密方式、参数等。JS代码通常使用jQuery、Vue.js、React和AngularJS等框架编写,我们需要对其进行模拟执行并提取关键信息。

1.分析页面

我们首先需要分析目标页面,找出JS渲染的部分并正确定位到需要获取的数据和信息。我们需要找到JS代码的执行顺序、可能存在的加密方式和传递参数的方式等。

2.分析JS代码和参数

找到JS代码并对其进行分析后,我们需要利用Python模拟执行该JS代码并获取相应数据。我们需要确定参数的位置和值,并利用Python解析数据以获取需要的数据。

例如,当网站使用jQuery进行JS渲染时,我们可以找到与文件相关联的URL链接,发送AJAX请求获取HTML代码 ,并解析其中的数据。设置AJAX请求的参数、头部信息并发送请求,获取到HTML代码并用Python进行解析。

  1. import requests
  2. import re
  3. from pprint import pprint
  4. from pyquery import PyQuery as pq
  5. def parse_page(html):
  6.     doc = pq(html)
  7.     return doc('title').text()
  8. def get_html(url, headers):
  9.     res = requests.get(url, headers=headers)
  10.     html = res.text
  11.     # 解析html,过滤掉其他标签,只要标题
  12.     return parse_page(html)
  13. headers = {
  14.     'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'
  15. }
  16. url = 'https://www.baidu.com'
  17. print(get_html(url, headers))


3.模拟Ajax请求或操作浏览器


如果网站的JS逆向需要进行Ajax请求的模拟发送,可以使用类似于request库之类的Python库来发送请求,或者使用Selenium模拟浏览器操作。

  1. from selenium import webdriver
  2. from selenium.webdriver.chrome
  3. options import Options
  4. #设置浏览器头和禁用图片加载
  5. chrome_options = Options()
  6. chrome_options.add_argument(‘–no-sandbox’)
  7. chrome_options.add_argument(‘–disable-dev-shm-usage’)
  8. chrome_options.add_argument(‘–disable-gpu’)
  9. chrome_options.add_argument(‘–disable-setuid-sandbox’)
  10. chrome_options.add_argument(‘–headless’)
  11. chrome_options.add_argument(‘–disable-extensions’)
  12. #创建浏览器对象
  13. browser = webdriver.Chrome(options=chrome_options)
  14. #通过js来控制点击“下一页”翻页
  15. #这里假定下一页链接是’next’的,如果需要替换
  16. #只需要这里用find_element_by_xpath方法查找并替换即可
  17. js = “document.querySelector(‘a[href=“next”]’).click()”
  18. #在浏览器中打开链接
  19. browser.get(url)
  20. #以固定的时间间隔执行JS方法
  21. browser.execute_script(js)
  22. time.sleep(10)
  23. #获取页面
  24. html = browser.page_source
  25. #对页面进行解析
  26. #…
  27. #关闭浏览器
  28. browser.quit()


四、JS逆向爬虫的注意事项

1. 遵守网站规则和政策

进行网站爬取时,需要遵守相关政策、遵守社区规则,不得进行侵权或者影响到网站原有服务和资源的使用。

2. 注意程序效率

由于JS逆向需要模拟JS代码的执行,程序效率可能会变得较低。我们应该设计科学的程序结构,以最小的代价来完成任务。

3. 遵循爬虫规则

爬虫是给用户带来便利的工具,但是应该遵守相关的爬虫规则,不要给被爬网站造成负面影响,否则可能会被严惩。

4. 确保数据准确性

在进行数据爬取操作时,我们需要确保数据的准确性和完整性,防止出现数据损失或错误。

五、总结

JS逆向爬虫是解决JS解密反爬措施的有效方式。在Python中使用Requests和Selenium等库,我们可以模拟执行JS代码,获取到所需要的数据。在进行JS逆向爬虫时,我们需要分析JS和页面的结构,遵守爬虫规则,保证程序的效率和数据的准确性。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/226622
推荐阅读
相关标签
  

闽ICP备14008679号