解决ajax异步渲染页面防止反爬虫

1.scrapy在爬取过程中遇到ajax渲染的页面,只爬取到了js代码,爬不到真实的页面内容。
存在两个问题:
1)获取到这些网页的链接?
2)怎么爬取到这些链接的真实文本内容?

解决方法:(前提:可以获取到这些链接)
第一,如果链接的处理方式不可以统一,建立域名与爬取策略的联系,通过特定的js请求的目标url获取到json数据进行爬取;(缺点:无法做到完全穷尽,效率低)
第二,如果链接的处理方式可以统一,可以写一个统一的反爬虫程序,将读取文件统一处理
第三,统一打开浏览器,待爬虫全部结束再关闭浏览器,对ajax和非ajax统一处理
(缺点:速度太慢)

爬取动态页面目前来说有两种方法:
1)分析页面请求(无法做归类,只适合特定网页)
2)selenium模拟浏览器行为(在爬虫过程打开浏览器,爬虫结束关闭浏览器)
3)最新的scrapy已经自带处理“ Ajax可抓取页面”的爬网中间件(看官方文档的重要性!!!!)
AJAXCRAWL_ENABLED = True
在这里插入图片描述

1.对于特定的网页,通过特定的js请求的目标url获取到json数据进行爬取;
2.通过判断内容中是否含有对应的vue、angular、react框架设计:
1)获取到爬取异步渲染页面的链接(通过区分出三大框架各自的特点保存链接)
存在难点:怎么通过内容去反向拿到链接?
2)通过获取的链接进行异步获取内容

1.安装Selenium库
Pip install selenium
2.查看浏览器版本,下载对应版本的webdriver
chrome://version
3.在scrapy集成selenium
1)在spider主程序初始init函数增加:

#启动webdriver
 self.browser = webdriver.Chrome(executable_path='C:\Program Files (x86)\Google\Chrome\Application\chromedriver.exe')self.browser.set_page_load_timeout(30)

#运行结束后,关闭webdriver
        def closed(self,spider):
            print("spider closed")
            self.browser.close()

2)设置selenium中间件

#设置selenium中间件
class SeleniumMiddleware(object):
    def process_request(self, request, spider):
        if spider.name == 'getcontent':
            try:
                spider.browser.get(request.url)
                spider.browser.execute_script('window.scrollTo(0, document.body.scrollHeight)')
            except TimeoutException as e:
                print('超时')
                spider.browser.execute_script('window.stop()')
            time.sleep(2)
            return HtmlResponse(url=spider.browser.current_url, body=spider.browser.page_source, encoding="utf-8", request=request)

3)setting文件

#添加SeleniumMiddleware中间件
   'web_content.middlewares.SeleniumMiddleware': 544,

3.启动scrapy的多个爬虫方法:
1)开启多个命令行,分别执行scrapy crawl XXX
2)编写一个脚本
3)使用scrapyd,部署爬虫,通过scrapyd的API调用爬虫

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值