首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用pyppeteer创建for循环的理想方法

使用pyppeteer创建for循环的理想方法
EN

Stack Overflow用户
提问于 2018-11-26 20:20:30
回答 2查看 688关注 0票数 2

我用python结合pyppeteer写了一个脚本,从一个网页上抓取不同咖啡店的名称和电话号码。尽管我尝试了下面的方法来达到目的,但是脚本看起来非常混乱。使用pyppeteer库创建for循环的理想方式是什么?

到目前为止,我已经写了:

代码语言:javascript
复制
import asyncio
from pyppeteer import launch

url = "https://www.yellowpages.com/search?search_terms=coffee&geo_location_terms=Los%20Angeles%2C%20CA"

async def get_names(link):
    wb = await launch(headless=True)
    page = await wb.newPage()
    await page.goto(link)

    containers = await page.querySelectorAll('div.v-card')
    for container in containers:
      name = await container.querySelector('.business-name span')
      phone = await container.querySelector('.phones')
      post = await page.evaluate('(element) => element.textContent', name)
      postAno = await page.evaluate('(element) => element.textContent', phone)
      print(f'{post}--{postAno}')

    await wb.close()

asyncio.get_event_loop().run_until_complete(get_names(url))
EN

回答 2

Stack Overflow用户

发布于 2018-12-05 05:24:31

我会这样做:

代码语言:javascript
复制
import asyncio
from pyppeteer import launch

url = "https://www.yellowpages.com/search?search_terms=coffee&geo_location_terms=Los%20Angeles%2C%20CA"

async def get_names(link):
    wb = await launch()
    page = await wb.newPage()
    await page.goto(link)

    containers = await page.querySelectorAll('div.v-card')
    for container in containers:
        name = await container.querySelectorEval('.business-name span','e => e.innerText')
        phone = await container.querySelectorEval('.phones','e => e.innerText')
        print(name,phone)

asyncio.get_event_loop().run_until_complete(get_names(url))
票数 2
EN

Stack Overflow用户

发布于 2018-11-26 20:41:01

试一试:

代码语言:javascript
复制
import asyncio
from pyppeteer import launch

url = "https://www.yellowpages.com/search?search_terms=coffee&geo_location_terms=Los%20Angeles%2C%20CA"

async def get_names(link):
    wb = await launch(headless=True)
    page = await wb.newPage()
    await page.goto(link)

    names = await page.querySelectorAllEval('div.v-card .business-name span',
                                 '(elements => elements.map(e => e.textContent))')
    phones = await page.querySelectorAllEval('div.v-card .phones', 
                                 '(elements => elements.map(e => e.textContent))')
    result = {name: phones[idx] for (idx, name) in enumerate(names)}
    print(result)
    await wb.close()

asyncio.get_event_loop().run_until_complete(get_names(url))

并阅读文档:querySelectorAllEval

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53481018

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档