Requests-html解析庫的使用

Requests-html解析庫的使用

常見的解析庫:re正則,bs4,pyppeteer(驅動瀏覽器內核),lxml
    
安裝:pip install requests-html    
    
from requests_html import HTMLSession,HTML

#可視化設置
"""
session = HTMLSession(
    browser_args=[
    '--no-sand',
    '--user-agent=XXXXX',
    ],headless=False
)
"""


session = HTMLSession() 
response = session.request() 與requests響應基本同樣

#解析response.html的屬性:

response.html.absolute_links    (返回頁面中全部路徑爲絕對路徑)

             .links           (頁面中的全部路徑)

             .base_url         (頁面中base標籤的路徑)

             .html             (解析頁面佈局內容)

             .text             (得到頁面標籤中的全部文本)

             .encoding = 'gbk'  (r.html的編碼方式)

              .raw_html         (二進制頁面內容)

              .pq               (pyQuery)

            
#解析response.html的屬性方法:
r.html.find('css選擇器')   :返回[element對象1,...]
    
      .find('css選擇器',first=True)
      
      .xpath('xpath選擇器',first=True)
        
 
#response.html的search方法
result=r.html.search(''<a href="{src}">{name}</a>'')
返回頁面由上至下的第一個Result對象,經過reslut['name']方式取出值

result=r.html.search_all(''<a href="{src}">{name}</a>'')
返回頁面上[Result對象1,....]


#response.html的render方法
response.html.render()
    參數:
        js注入:
            script = """
                    var a = document.querySelector("#query")
                    var b = a.getBoundingClientRect()
                    return {"x":b.x}
                    """
        scrolldown = 10 向下滑動
        sleep = 10 
        keep_page = False(默認爲False)
        當設置爲True時,阻止關閉瀏覽器,經過r.html.page與瀏覽器進行交互                     
        如何繞過網站對webdriver的檢測:(可反爬)
            script='''() =>{
                            Object.defineProperties(navigator,{
                            webdriver:{
                                    get: () => undefined
                                    }
                                })
                            }'''

        
#Element對象的方法
element=r.html.find('css選擇器',first=True)

element.absolute_links
       .links
       .text
       .html
       .attrs(返回屬性的集合)
       .find('css選擇器')
       .search('模板')
       .search_all('模板')


#r.html.page與瀏覽器進行交互  
首先,r.html.render(keep_page = True)
async def run():
    #交互語句
     mydic = await r.html.page.evaluate('''() =>{
     var a = document.querySelector('#kw')
     var b = a.getBoundingClientRect()
     return {'x':b.x,'y':b.y , 'width':b.width , 'height':b.height }
     }''')
     screenshot截圖,path:截圖文件保存地址,clip:四個參數
     #await r.html.page.screenshot({'path':'1.png','clip':mydic})
     
     type('css選擇器','內容',{'delay':100}),模擬輸入框內容  
    #await r.html.page.type('#kw','東京熱',{'delay':400})
        
    hover 模擬鼠標懸浮   
    #await r.html.page.hover('li[class="category-item"]')
    
    focus模擬鼠標光標聚焦
    # await r.html.page.focus('#login_field')
    # await r.html.page.keyboard.type('935938484@qq.com')
    # await r.html.page.focus('#password')
    # await r.html.page.keyboard.type('a-new-world')
    
    模擬鍵盤事件
    # await r.html.page.click('[name="commit"]',{'button':'left'})
    #await r.html.page.keyboard.type('喜歡你啊aaaaa')
    #await r.html.page.keyboard.down('Shift')
    #for i in range(5):
    #    await r.html.page.waitFor(100)
    #    await r.html.page.keyboard.press('ArrowLeft')
    #await r.html.page.keyboard.up('Shift')
    #await r.html.page.keyboard.press('Backspace')
    #await r.html.page.waitFor(5000)
    
    模擬點擊事件
    .click(x,y,{
                'button':'left',
                'click':1
                'delay':0
            })
            .down({'button':'left'})
            .up({'button':'left'})
            .move(x,y,{'steps':1})


try:
    session.loop.run_until_complete(run())
finally:
    session.close()
相關文章
相關標籤/搜索