zoukankan      html  css  js  c++  java
  • 爬虫-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

  • 相关阅读:
    Sql Server Report 导出到EXCEL 指定行高
    SQLSqlserver中如何将一列数据,不重复的拼接成一个字符串
    SQL Server Management Studio无法记住密码
    nuget.org无法解析的办法
    js获取select标签选中的值及文本
    Word 如何实现表格快速一分为二
    sql server rdl report 如何用动态sql
    浏览器窗口刷新
    SWFUpload 在ie9上出现的bug
    历数PC发展史上的祖先们
  • 原文地址:https://www.cnblogs.com/zx125/p/12153778.html
Copyright © 2011-2022 走看看