python 파충류 의 pyppeter 라 이브 러 리 간단하게 사용

8944 단어 python파충pyppeteer
pyppeteer
Pyppeter 를 소개 하기 전에 Puppeteer 를 말씀 드 리 겠 습 니 다.Puppeteer 는 구 글 이 만 든 Node.js 를 기반 으로 개발 한 도구 입 니 다.주로 Chrome 브 라 우 저의 API 를 조작 하고 자바 script 코드 를 통 해 Chrome 브 라 우 저 를 조작 하 며 데이터 추출,웹 프로그램 자동 테스트 등 임 무 를 수행 합 니 다.
4.567915.비공 식 Python 버 전의 Puppeter 라 이브 러 리,브 라 우 저 자동화 라 이브 러 리 로 일본 엔지니어 가 개발 했다.
pyppeteer구 글 이 Node.js 를 기반 으로 개발 한 도구 로 크롬의 API 를 호출 하고 자 바스 크 립 트 코드 를 통 해 크롬의 일부 조작 을 조작 하여 인터넷 파충류,웹 프로그램 자동 테스트 등에 사용 합 니 다.
pyppeter 는 Python 비동기 협 정 라 이브 러 리 를 사 용 했 습 니 다PuppeteerScrapy 를 통합 하여 분포 식 파충 류 를 할 수 있 습 니 다.
puppet 인형,puppeter 가 인형 을 조종 하 는 사람.
pyppeter 와 puppeter 의 차이 점
pyppeter 는 사전 과 키워드 전 삼 을 지원 합 니 다.puppeter 는 사전 전 삼 만 지원 합 니 다.

# puppeteer       
browser = await launch({'headless':True})

# pyppeteer          
browser = await launch({'headless':True})
browser = await launch(headless=True)
요소 선택 기 방법 명$query Selector 로 변경

# puppeteer  $ 
page.$()/page.%%()/page.$x()

# pyppeteer  python      
page.querySelector()/page.querySelectorAll()/page.xpath()

#     
page.J()/page.JJ()/page.Jx()
page.evluate()와 page.query Selector Eval()의 인자
puppeter 의 evaluate()방법 은 JavaScript 원생 함수 나 JavaScript 표현 식 문자열 을 사용 합 니 다.pyppeter 의 evaluate()방법 은 JavaScript 문자열 만 사용 합 니 다.이 문자열 은 함수 일 수도 있 고 표현 식 일 수도 있 습 니 다.pyppeter 는 자동 으로 판단 합 니 다.그러나 때때로 오 류 를 판단 할 수 있 습 니 다.문자열 이 함수 로 판단 되 고 오 류 를 보고 하면 파 라 메 터 를 추가 할 수 있 습 니 다force_expr=Truepyppeter 를 표현 식 으로 처리 하도록 강제 할 수 있 습 니 다.
웹 페이지 내용 가 져 오기:

content = await page.evaluate('document.body.textContent',force_expr=True)
요소 의 내부 텍스트 가 져 오기:

element = await page.querySelector('h1')
title = await page.evaluate('(element) => element.textContent',element)
설치 하 다.
1.설치pyppeteer

pip install pyppeteer
2.설치chromium

pyppeteer-install
간단히 사용 하 다

import asyncio
from pyppeteer import launch

async def main():
    url = 'https://www.toutiao.com/'
    # headless     Falase,       
    browser = await launch(headless=False, ignoreDefaultArgs=['--enable-automation'])
    page = await browser.newPage()
    
    #         
    await page.setViewport(viewport={'width':1600,'herght':900})
    
    #     JS,enabled  False,      
    await page.setJavaScriptEnable(enabled=True)
    
    #     1000  
    res = await page.goto(url,options={'timeout':1000})
    resp_headers = res.headers  #    
    resp_status = res.status    #     
    
    #   
    await asyncio.sleep(2)
    await page.waitFor(1000)
    #       , while              
    while not await page.querySelector('.t')
    
    #        
    await page.evaluate('window.scrollBy(0,document.body.scrollHeight)')
    
    await page.screenshot({'path':'test.png'})
    
    #     cookies
    print(await page.cookies())
    
    #     html  
    print(await page.content())
    
    
    dimensions = await page.evaluate(pageFunction='''() => {
    		return {
    			width:document.documentElement.clentWidth,    //     
    			height:document.documentElement.clentHeight,  //     
    			deviceScaleFactor: window.devicePixelRatio,  //    1.0000000149011612
    			}
    		}''',force_expr=False)   # force_expr=False        
    print(dimensions)
    
    content = await page.evaluate(pageFunction='document.body.textContent',force_expr=True)    #         js  ,force_expr=True         
    print(content)
    
    #          
    print(await page.title())
    
    
    #             xpath   
    '''
    pyppeteer       
    page.querySelector()
    page.querySelectorAll()
    page.xpath()
         :
    page.J()
    page.JJ()
    page.Jx()
    '''
    element = await page.querySelector(".feed-infinite-wrapper > ul>li")
    print(element)
    
    
    element = await page.querySelectorAll(".title-box a")
    for item in element:
        print(await item.getProperty('textContent'))
        #       
        title_str = await (await item.getProperty('textContent')).jsonValue()
        
        title_link = await (await item.getProperty('textContent')).jsonValue()
        
        #      
        # title = await (await item.getProperty('class')).jsonValue()
        print(title_str,title_link)
    await browser.close()


asyncio.get_event_loop().run_until_complete(main())
아 날로 그 텍스트 입력 과 클릭

#            {'delay':reand_int()}        
await page.type('#kw',"  ",delay=100)
await page.type('#TPL_username_1',"asdasd")

await page.waitFor(1000)
await page.click('#su')
Chrome 을 제거 하 는 것 은 자동 테스트 소프트웨어 의 제 어 를 받 고 있 습 니 다.

browser = await launch(headless=False, ignoreDefaultArgs=['--enable-automation'])
#   ignoreDefaultArgs=['--enable-automation']   
경 동상 점 을 점령 하 다

from bs4 import BeautifulSoup
from pyppeteer import launch
import asyncio


def screen_size():
    return 1600,900


async def main(url):
    browser = await launch({"args":['--no-sandbox'],}) # "headless":False
    page = await browser.newPage()
    width, height = screen_size()
    await page.setViewport(viewport={'width':width,'height':height})
    await page.setJavaScriptEnabled(enabled=True)
    await page.setUserAgent('Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36')
    await page.goto(url)

    await page.evaluate('window.scrollBy(0, document.body.scrollHeight)')

    await asyncio.sleep(1)

    # content = await page.content()
    li_list = await page.xpath('//*[@id="J_goodsList"]/ul/li')

    item_list = []
    for li in li_list:
        a = await li.xpath('.//div[@class="p-img"]/a')
        detail_url = await (await a[0].getProperty('href')).jsonValue()
        promo_words = await (await a[0].getProperty('title')).jsonValue()
        a_ = await li.xpath('.//div[@class="p-commit"]/strong/a')
        p_commit = await (await a_[0].getProperty('textContent')).jsonValue()
        i = await li.xpath('./div/div[3]/strong/i')
        price = await (await i[0].getProperty('textContent')).jsonValue()
        em = await li.xpath('./div/div[4]/a/em')
        title = await (await em[0].getProperty('textContent')).jsonValue()
        item = {
            "title" : title,
            "detail_url" : detail_url,
            "promp_words" : promo_words,
            "p_commit" : p_commit,
            "price" : price
        }
        item_list.append(item)

    await page_close(browser)
    return item_list


async def page_close(browser):
    for _page in await browser.pages():
        await _page.close()
    await browser.close()


url = 'https://search.jd.com/Search?keyword=%E6%89%8B%E6%9C%BA&wq='\
		'%E6%89%8B%E6%9C%BA&pvid=e07184578b8442c58ddd65b221020e99&page={}&s=56&click=0 '
task_list = []
for i in range(1,4):
    page = i * 2 - 1
    task_list.append(main(url.format(page)))

results = asyncio.get_event_loop().run_until_complete(asyncio.gather(*task_list))

for i in results:
    print(i,len(i))

print('*'*100)
在这里插入图片描述
python 파충류 의 pyppeter 라 이브 러 리 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 python 파충류 pyppeter 라 이브 러 리 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 많은 응원 부 탁 드 리 겠 습 니 다!

좋은 웹페이지 즐겨찾기