目录 Requests-html解析库的使用 Requests-html解析库的使用 常见的解析库:re正则,bs4,pyppeteer(驱动浏览器内核),lxml 安装:pip install requests-html from requests_html import HTMLSession,HTML#可视化设置"""sessi
目录
- 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()