我想通过代码下载谷歌街景图像,我确实做到了,但我遇到了一些问题。我想使用多个位置的 180 度摄像头下载单个街景图像。
为此,我在 python 中使用了 pypi 的 google-streetview 1.2.4 库。代码如下。 https://pypi.org/project/google-streetview/ https://rrwen.github.io/google_streetview/#
# Import google_streetview for the api and helper module
import google_streetview.api
import google_streetview.helpers
# Create a dictionary with multiple parameters separated by ;
apiargs = {
'location': '23.87,90.3939;23.87,90.3944;23.87,90.3951;23.87,90.3959',
'size': '640x300',
'heading': '0;90;180',
'pitch': '0;0;0;0',
'key': 'google_dev_key'
}
# Get a list of all possible queries from multiple parameters
api_list = google_streetview.helpers.api_list(apiargs)
# Create a results object for all possible queries
results = google_streetview.api.results(api_list)
# Preview results
results.preview() …Run Code Online (Sandbox Code Playgroud) 我正在尝试运行 Selenium 从我公司的内部网站上抓取信息。我一直遇到以下错误:
驱动程序<- rsDriver(浏览器=c(“chrome”)
检查 Selenium 服务器版本:BEGIN:PREDOWNLOAD open.connection(con,“rb”)中的错误:无法连接到 www.googleapis.com端口 443:超时
我已经尝试过这篇文章中的解决方案,但它在代理后面的 RSelenium不起作用
我也在论坛上搜索过,因为过去有很多人遇到过类似的问题,但与 R 相关的人并不多。其他职位涉及的职能现已不复存在。还有其他办法吗?
我正在逐步将来自网络抓取的数据行附加到 DataFrame 中。虽然,有时我正在抓取的数据已经存在于 DataFrame 中,所以我不想再次附加它。检查 DataFrame 是否已有数据的最有效方法是什么?在末尾删除重复项不是一个选项,因为我想提取特定数量的记录,并且在末尾删除重复项将使最终 DataFrame 的记录少于指定数量。
\nres = pd.DataFrame([], columns=GD_SCHEMA)\n\nreviews = self.browser.find_elements_by_class_name('empReview')\nidx = 0\nfor review in reviews:\n data = extract_review(review) # This is a dict with the same keys as \xc2\xb4res\xc2\xb4\n \n # Most efficient way to check if \xc2\xb4data\xc2\xb4 already exists in \xc2\xb4res\xc2\xb4 before appending?\n res.loc[idx] = data\n idx += 1\nRun Code Online (Sandbox Code Playgroud)\n 我在这里阅读并理解了 Prometheus 2.0 涉及的陈旧概念
在我正在开发的导出器中,指标由远程设备作为 gRPC 流推送,因此我使用 prometheus.NewMetricWithTimestamp 动态创建指标并实现 Collector 接口。
每当远程设备停止发出指标时,这些指标就不再在 Prom 客户端 HTTP 端点中公开。但是, query.lookback-delta标志的默认值(5 分钟)使 Prometheus 将该指标标记为过时 5 分钟。因此,当发送 PromQL 查询时,我们仍然看到最后一个被抓取的值。
我确实将标志设置为 30 秒,因此从仪表板的角度来看,最终用户不必等待 5 分钟即可看到指标消失。
因此,我想知道 30s 是否是合理的值,如果不是,有何影响?
提前致谢。
我正在尝试网络抓取 http 网站,当我尝试阅读该网站时出现以下错误。
HTTPSConnectionPool(host='proxyvipecc.nb.xxxx.com', port=83): Max retries exceeded with url: http://campanulaceae.myspecies.info/ (Caused by ProxyError('Cannot connect to proxy.', OSError('Tunnel connection failed: 403 Forbidden',)))
Run Code Online (Sandbox Code Playgroud)
下面是我在类似网站上编写的代码。我尝试使用 urllib 和 user-agent 但仍然存在同样的问题。
url = "http://campanulaceae.myspecies.info/"
response = requests.get(url, headers={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36'})
soup = BeautifulSoup(response.text, 'html.parser')
Run Code Online (Sandbox Code Playgroud)
谁能帮我解决这个问题。提前致谢
我使用的Python 3.7.2硒刮从9GAG的学校项目。
我在 MacOS 上运行 chrome 80.0.3987.122。我的 chromedriver 版本是为 80 版提供的版本。下面的代码是我如何使用我的驱动程序:
from selenium import webdriver
from selenium.webdriver.chrome.options import Options as c_opt
options = c_opt()
options.headless = True
driver = webdriver.Chrome(executable_path=PATH_TO_DRIVER, chrome_options=options)
driver.get('https://www.9gag.com'))
with open('source.html', 'w') as f:
f.write(driver.page_source)
Run Code Online (Sandbox Code Playgroud)
昨天一切正常。我会运行此代码并打开源文件并查看前几篇 9gag 文章。从今天早上开始,我的源结果显示了一个加载图形,好像它没有完成加载 javascript。
我知道这不是网站的问题,因为我再次尝试使用无头 Firefox 驱动程序和非无头 chrome 驱动程序,一切都按预期工作。
据我所知,驱动程序没有显示任何错误。
我的第一嫌疑人是铬。我想也许它以某种方式更新了,而 selenium 或驱动程序不知道如何处理它。我真的需要使用无头,因为没有它我被迫专注于 chrome 窗口(这可能是 mac 问题,但仍然如此)。
有没有人遇到过这种行为?
更新
我发现我的问题仅在我访问特定类别时发生,例如https://9gag.com/funny。所以我从那里保存了输出并将其加载到 chrome 上并得到以下内容:
似乎无头 chrome 陷入了验证码,无法继续加载页面。这怎么可能现在才开始发生,有什么可以做的吗?我们如何解释 firefox 的 geckodriver 以某种方式克服了这个问题(它有自己的问题,但至少它加载了页面)?
python selenium google-chrome web-scraping selenium-chromedriver
我试图根据其类别刮黄页。所以我从文本文件加载类别并将其提供给 start_urls。我在这里面临的问题是为每个类别分别保存输出。以下是我尝试实现的代码:
CATEGORIES = []
with open('Catergories.txt', 'r') as f:
data = f.readlines()
for category in data:
CATEGORIES.append(category.strip())
Run Code Online (Sandbox Code Playgroud)
打开 settings.py 中的文件并制作一个列表以在蜘蛛中访问。
蜘蛛:
# -*- coding: utf-8 -*-
from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import CrawlSpider, Rule
from ..items import YellowItem
from scrapy.utils.project import get_project_settings
settings = get_project_settings()
class YpSpider(CrawlSpider):
categories = settings.get('CATEGORIES')
name = 'yp'
allowed_domains = ['yellowpages.com']
start_urls = ['https://www.yellowpages.com/search?search_terms={0}&geo_location_terms=New%20York'
'%2C '
'%20NY'.format(*categories)]
rules = (
Rule(LinkExtractor(restrict_xpaths='//a[@class="business-name"]', allow=''), callback='parse_item',
follow=True),
Rule(LinkExtractor(restrict_xpaths='//a[@class="next ajax-page"]', allow=''),
follow=True),
)
def parse_item(self, …Run Code Online (Sandbox Code Playgroud) 我试图从我试图抓取的网站上解决验证码问题
通常它的工作方式是,验证码位于表单内,我将验证码数据发送到解决验证码 api(我使用 DBC),它们返回一个令牌
我将令牌放入验证码输入中(#g-recaptcha-response),即使当我提交表单时绿色支票没有出现,它也会被接受
但是当验证码以另一种方式解决时,该网站会自动显示我想要抓取的信息,当验证码的绿色勾号出现时,页面会更新新信息
所以我的问题是,当我将令牌放入验证码输入中时,是否有任何方法可以在不提交表单的情况下触发验证码已解决事件(或者当绿色检查出现时发生的任何情况。我猜测是某种回调)?
编辑 :
通过探索 recaptcha 配置探索我发现了这个
___grecaptcha_cfg.clients[0].L.L.callback
Run Code Online (Sandbox Code Playgroud)
这指向这一点
function verifyCallback(e)
Run Code Online (Sandbox Code Playgroud)
但我不知道如何调用它
async function init_puppeteer() {
const global_browser = await puppeteer.launch({headless: false , slowMo : 10 , args: ['--no-sandbox', '--disable-setuid-sandbox' , ]});
const page = await global_browser.newPage();
await page.setUserAgent('Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36');
await page.setViewport({width: 1200, height: 1500});
try {
await page.goto('https://example.com', {timeout: 60000})
.catch(function (error) {
throw new Error('TimeoutBrows');
});
await page.waitForSelector('input[name="url"]');
await page.type('input[name="url"]', …Run Code Online (Sandbox Code Playgroud) 现在,在谷歌语音到文本API中,我正在做我想做的一切,除了当我想要的时候停止现在我已经尝试在API中调用函数stop()、pause(),其中八个不起作用
const record = require('node-record-lpcm16');// Imports the Google Cloud client library
const speech = require('@google-cloud/speech');// Creates a client
const client = new speech.SpeechClient();const encoding = 'LINEAR16';
const sampleRateHertz = 16000;
const languageCode = 'en-US';const request = {
config: {
encoding: encoding,
sampleRateHertz: sampleRateHertz,
languageCode: languageCode,
},
interimResults: false,
};// Create a recognize stream
const recognizeStream = client
.streamingRecognize(request)
.on('error', console.error)
.on('data', data =>
process.stdout.write(
data.results[0] && data.results[0].alternatives[0]
? `Transcription: ${data.results[0].alternatives[0].transcript}\n`
: `\n\nReached transcription time limit, press Ctrl+C\n`
)
);// Start …Run Code Online (Sandbox Code Playgroud) google-api node.js google-api-nodejs-client electron google-speech-to-text-api
我正在尝试使用 pyppeteer从这个网站https://quickfs.net/company/BABA:US抓取数据,如果没有这个网站会知道我正在抓取。
所以我的第一个问题是:
当输入右上角的链接时,会出现一个下拉列表,其中包含以下项目:概述、损益表、...、关键比率。
我想使用 pyppeteer 从下拉列表中选择 Key Ratios ,然后从那里提取Per-Share Items的数据,并从那里提取Book Value的行。
在我对该网站链接的预览问题的最后评论中,我被告知此下拉列表“仅触发呈现相同数据的不同方式”。
所以我的第二个问题和第三个问题是(也许它们是相同的):
我应该以某种方式模拟使用 pyppeteer 选择的关键比率吗?
如何使用 pyppeteer 从关键比率触发器中提取数据,而不会让网站知道有人正在抓取它?
我使用这些问题编写了一个代码来执行此操作,但我的代码仅从第一个页面的“概述”页面中提取数据。
这是我基于代码的问题
我还尝试从这篇文章中了解:Web Scraping with a Headless Browser: A Puppeteer Tutorial如何使用bottoms,但它不是使用Python的pyppeteer,而是使用Puppeteer
这是我使用的代码:
import pyppeteer
import asyncio
async def main():
# launches a chromium browser, can use chrome instead of chromium as well.
browser = …Run Code Online (Sandbox Code Playgroud) python ×6
web-scraping ×4
node.js ×2
csv ×1
electron ×1
google-api ×1
http-error ×1
javascript ×1
pandas ×1
prometheus ×1
puppeteer ×1
pyppeteer ×1
r ×1
recaptcha ×1
scrapy ×1
selenium ×1