python - 使用 pyppeteer 创建 for 循环的理想方法
问题描述
我编写了一个脚本,python
结合pyppeteer
从网页上抓取不同咖啡店的名称和电话号码。尽管我在下面尝试的方式可以达到目的,但脚本看起来确实很混乱。pyppeteer
使用库创建 for 循环的理想方法是什么?
到目前为止,我已经写过:
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))
解决方案
我会这样做:
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))
推荐阅读
- python - 从python中的多视频中提取一些帧
- python - 为什么 pip install 不下载 setup.py 中定义的依赖包?
- python - “AttributeError:‘函数’对象没有属性集”tkinter
- javascript - 如果在console.log中调用了相应的函数,如何打印标签。现在它不打印标签和结果?
- python - 澄清涉及字符串和读取多个字符串的问题
- java - 如何使用@Resource(在 javax.annotation 中)或@InjectableResource(在 DeltaSpike 中)在 JBoss 4.2.x 中注入 login-config.xml?
- php - 如何使用 Codeigniter 3 从 URL 中隐藏 Post Controller 名称和方法
- api - Github API 分支历史,如何从 API 中获取
- docker - 是否可以使用 Dockerfile 和环境变量的外部文件构建容器?
- latex - 乳胶趋势线问题