目錄css
常見的解析庫: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()