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('[email protected]')
    # 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() 

猜你喜欢

转载自www.cnblogs.com/bruce123/p/11695141.html