python 파충류 의 pyppeter 라 이브 러 리 간단하게 사용
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=True
pyppeter 를 표현 식 으로 처리 하도록 강제 할 수 있 습 니 다.웹 페이지 내용 가 져 오기:
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 라 이브 러 리 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 많은 응원 부 탁 드 리 겠 습 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
로마 숫자를 정수로 또는 그 반대로 변환그 중 하나는 로마 숫자를 정수로 변환하는 함수를 만드는 것이었고 두 번째는 그 반대를 수행하는 함수를 만드는 것이었습니다. 문자만 포함합니다'I', 'V', 'X', 'L', 'C', 'D', 'M' ; 문자열이 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.