• 爬虫-requests-html


    文档

    https://cncert.github.io/requests-html-doc-cn/#/

    安装

    pip install requests-html
    

    简单使用

    from requests_html import HTMLSession
    
    session = HTMLSession()
    r = session.get(url='https://search.jd.com/Search?keyword=显卡&enc=utf-8&suggest=2.his.0.0&wq=&pvid=2abde6628c7841d78f46d8e412e04b61')
    goods = r.html.find('.gl-item')
    for i in goods:
        print(i.text)
    

    Element

    #首先获取一个element对象
    element = r.html.find('.gl-item',first=True)
    
    #获取element里面的文本内容 str
    element.text
    
    #获取所有的attributes dict
    element.attrs
    
    #获取element的html内容 str
    element.html
    
    #获取element里的子element list
    element.find('a') 
    
    #search,类似re的.*? Result
    print(good.search('<span class="p-{}-{}">广告</span>'))
    
    #xpath
    element.xpath('a')
    

    支持js

    内部使用的是pyppeteer而不是selenium,更小众,但是被反爬的概率更小

    第一次调用会下载一个Chromium

    #默认重新发起一次请求
    r.html.render()
    
    #使用内存中的
    r.html.render(reload=False)
    
    #请求完成会替换原先的r.html.html
    

    关于使用render的基本设置

    如果运行render报错

    #运行下面的命令
    pyppeteer-install
    
    #或者去pyppeteer的chromium_downloader.py里面去打印
    print(chromiumExecutable['win64'])
    
    根据下载地址下载,和安装地址安装(安装为上一级目录)
    

    参数设置

    session = HTMLSession(
        browser_args=[
            '--no-sand',
            '--user-agent=XXXXX'
        ],
        headless=False
    )
    

    如何设置有头

    #默认是无头浏览器,如果想要设置成有头需要修改源码进行设置
    #加上一个headless=True的默认参数
    class BaseSession(requests.Session):
        """ A consumable session, for cookie persistence and connection pooling,
        amongst other things.
        """
    
        def __init__(self, mock_browser : bool = True, verify : bool = True,
                     browser_args : list = ['--no-sandbox'],headless=True):
            super().__init__()
    
            # Mock a web browser's user agent.
            if mock_browser:
                self.headers['User-Agent'] = user_agent()
    
            self.hooks['response'].append(self.response_hook)
            self.verify = verify
    
            self.__browser_args = browser_args
            self.__headless = headless
            
    #在修改browser的默认参数为传递进来的参数
        @property
        async def browser(self):
            if not hasattr(self, "_browser"):
                self._browser = await pyppeteer.launch(ignoreHTTPSErrors=not(self.verify), headless=self.__headless, args=self.__browser_args)
    
            return self._browser        
     
    #然后就可以正常设置有头和无头
    

    render参数

    更多

    .render(.....)     
    
    **参数:**
    
    script:
    '''
    ( ) => {
    
    js代码
    
    js代码
    }
    '''
    
    #需要设置为True,否则后面无法使用r.html.page,这个是与浏览器交互的关键
    keep_page(bool)
    

    反爬

    #如果是内核的话undefined,如果使用webdriver的话为True
    							绕过网站对webdriver的检测:
    							'''
    							() =>{
                                    Object.defineProperties(navigator,{
                                    webdriver:{
                                        get: () => undefined
                                        }
                                    })
                                }
                                '''
    

    参考链接

    https://www.jianshu.com/p/bd828b9cf74d

  • 相关阅读:
    转载: JS 中 new 操作符
    转载: js的值,对象,原型
    php setcookie(name, value, expires, path, domain, secure) 参数详解
    转载:js数组对象操作
    转载: js数组与 json 的区别
    转载: js的Prototype属性 解释及常用方法
    行人检测程序对接景区测试人数比对数据库切换时间不准确排查
    TSINGSEE青犀视频行人检测集成票务系统读取票务系统数据库为空的问题
    EasyWasmPlayer播放视频报错Uncaught (in promise)DOMException
    名胜景区部署TSINGSEE青犀视频监控具备哪些现实意义?
  • 原文地址:https://www.cnblogs.com/zx125/p/12153778.html
Copyright © 2020-2023  润新知