Web抓取是从不易提供API或其他自动数据检索方法的网站中提取特定信息的过程。关于“如何开始使用刮擦”(例如使用Excel VBA)的问题应该*进行彻底的研究*,因为有许多功能代码示例可供使用。 Web抓取方法包括第三方应用程序,定制软件的开发,甚至是标准化方式的手动数据收集。
因此,我想创建一个应用程序,定期从用户提供的产品销售页面获取 HTML。 问题是我不知道如何检索这些值,这样它们就不会......
我正在尝试通过 selenium python 抓取网站上的图像。我在定位图像时遇到了问题。 代码: 驱动程序 = webdriver.Chrome('chromedriver') begin_of_url = "https://looku...
我试图从确实的网站上抓取数据,并想首先创建一个转换函数来查找所有具有此部分的 div 并返回长度: 我的代码不断返回零...
Python 网页抓取:BeautifulSoup 未显示所有 html 源内容
我对网络抓取和Python很陌生。我正在尝试制作一个脚本,从 http://finra-markets.morningstar.com/BondCenter/BondDetail.jsp?symbol=NFLX4333665&ticker=
如何抓取像Beauhurst和Pitchbook这样的数据库平台?
使用Python 3.12; pycharm。 一些背景信息:我的 Excel 表格上有不到 800 家所谓的英国私募股权公司,其中很多都处于不活跃/解散等状态。我必须抓住一些关键...
我正在尝试从该网站下载 csv 格式的数据,这看起来很简单,但 selenium 无法找到该按钮。我已经下载了页面源代码并验证了它的存在,所以我不确定...
如何使用selenium chromedriver和google收集>100k新闻文章URL进行数据分析?
我必须从大约 5 个网站收集大约 2017 年到 2024 年的互联网新闻文章的文本数据。这是数万/数十万篇文章。我有办法抓取其中一些 URL
我正在从html文件中提取数据,它是表格格式,所以我编写了这行代码,将所有表格转换为带有pandas的数据框。 dfs = pd.read_html("synced_contacts.html"...
Google Sheets IMPORTXML - 抓取参展商列表
公司名称屏幕截图:尝试为我的 CRM(Google 表格)抓取公司名称,但出现公式解析错误。 网站:https://exhibitormanual.oceanbusiness.com/ 试图改变孩子/cl...
我正在尝试制作一个个人项目,该项目将使用刮刀从维基百科收集文本和数字数据,稍后将所有这些数据移动到数据库,然后比较所有这些收集到的值...
使用 waitForSelector 方法在 Puppteer JS 中更改类名时获取元素
我需要等待元素更改类。 问题是当我使用 waitForSelector 函数时,它不起作用,因为没有新元素添加到 DOM 中。然而,元素 我需要等待一个元素改变类。 问题是当我使用 waitForSelector 函数时,它不起作用,因为没有新元素添加到 DOM 中。然而,<div>元素改变了它的类名。 等待元素直到其类名更改,或等到某个类名出现的正确方法是什么? 我当前的代码: import type { NextApiRequest, NextApiResponse } from "next"; const puppeteer = require("puppeteer"); export default async function handler( req: NextApiRequest, res: NextApiResponse ) { const browser = await puppeteer.launch({ executablePath: "../../../../../../Program Files (x86)/Google/Chrome/Application/chrome.exe", headless: false, }); const page = await browser.newPage(); await page.goto("https://www.craiyon.com/", { timeout: 0, waitUntil: "domcontentloaded", }); await page.waitForTimeout(1000); await page.type(".svelte-1g6bo9g", "sausage"); await page.click("#generateButton"); const test = await page.waitForSelector( ".h-full.w-full.cursor-pointer.rounded-lg.border.border-medium-blue.object-cover.object-center.transition-all.duration-200.hover:scale-[0.97].hover:border-2.hover:border-grey", { timeout: 0, } ); await browser.close(); console.log(test); res.status(200).json({ test: "test" }); } 这是稍后更改的类名: .h-full.w-full.cursor-pointer.rounded-lg.border.border-medium-blue.object-cover.object-center.transition-all.duration-200.hover:scale-[0.97].hover:border-2.hover:border-grey 最后,这是我想要获取的类名:.grid.grid-cols-3.gap-1.sm:gap-2。 我相信你误解了waitForSelector。它不关心元素是新创建的还是已经存在并且有新的类修改。两者都是 DOM 突变,并且将注册为匹配项。 您可以等待您想要存在的选择器,而不是使用等待消失的旧选择器。一旦选择器准备好,waitForSelector就会立即解析,无论它如何进入 DOM 或位于哪个元素上。 如果你想等待某些东西消失或改变,你可以使用waitForFunction,这是waitForSelector的更通用版本。 此外,:表示伪选择器——它在技术上是有效的,但与.sm:gap-2不匹配。您可以将该类排除在外,或者使用建议的属性样式选择器在此评论中,但需要注意的是,这些选择器可能过于挑剔——如果顺序发生变化,它将失败。 暂时忽略这一部分似乎没问题,我们可以从响应中获取 URL,我猜这是我们最关心的: const puppeteer = require("puppeteer"); // ^19.6.3 const url = "<Your URL>"; let browser; (async () => { browser = await puppeteer.launch(); const [page] = await browser.pages(); await page.goto(url, {waitUntil: "domcontentloaded"}); await page.type("#prompt", "sausage"); const imgUrls = new Set(); const responsesArrived = Promise.all( [...Array(9)].map(() => page.waitForResponse( res => { if ( res.request().resourceType() === "image" && res.url().startsWith("https://img.craiyon.com") && res.url().endsWith(".webp") && !imgUrls.has(res.url()) ) { imgUrls.add(res.url()); return true; } }, {timeout: 120_000} ) ) ); await page.click("#generateButton"); const responses = await responsesArrived; console.log([...imgUrls]); const grid = await page.waitForSelector( ".grid.grid-cols-3.gap-1" ); await grid.screenshot({path: "test.png"}); })() .catch(err => console.error(err)) .finally(() => browser?.close()); 建议: 尽量避免waitForTimeout。它已被弃用并导致竞争条件,要么减慢脚本速度,要么使其随机失败。 Puppeteer 的文档建议不要使用它。 切勿使用timeout: 0,尤其是在调试脚本时。没有理由永远阻止。如果选择器失败,并且您的脚本从未报告失败发生的位置,而是挂起,那么您会错过重要的诊断信息。如果您确实必须等待某些事情,否则您的计算机会爆炸,请将等待时间设置为 10 分钟、一天或一周(如果您确实希望某件事需要那么长时间),但不要无限期。如果是关键任务,您可以接住投掷并重试该操作。 避免长选择器。它们通常很脆弱,因为它们对页面上的结构或类假设太多。这个页面有点敌意,提供了一些高质量的元素挂钩,但它仍然值得记住。通常认为最好通过用户可见的属性(例如角色和文本)进行选择。 该网站加载了大量垃圾资源,因此您可以通过阻止您不需要的所有内容来加快速度并节省资源。您可以使用 page.on("request", req => console.log(req.url()) 查看所有 URL,然后系统地阻止与获取结果无关的 URL。 披露:我是链接博客文章的作者。
我正在尝试用Python编写网页抓取代码,但是登录网站后,由于人工验证,其访问始终被拒绝。 我使用了下面的代码,网站上写着
我有一个代码片段,可以通过Python中的Playwright从网页的DOM树中提取可输入和可点击的节点元素(即交互式元素)。 这段代码几乎可以正常工作......
我正在尝试使用 rvest 抓取数据,但已经有一段时间了,我无法完成看似简单的任务。我尝试过各种 html 和 css 元素来提取数据,但仍然得到
我正在制作一个蜘蛛来从weather.com获取天气数据。我创建了一个 for 循环来使用我想要的数据迭代 列表,然后在循环中提取我的信息。但是循环...
抓取了 0 个页面(以 0 页/分钟),抓取了一定数量的页面后抓取了 0 个项目(以 0 个项目/分钟)
我正在尝试使用 Scrapy-Playwright 抓取提供的 URL 列表。但我发现了一个奇怪的行为。它开始爬行得很好,但每次爬行到一定数量的页面后就会停止
如何使用 read_html_live() 浏览 javascript 寻呼机?
我想抓取使用 JavaScript 寻呼机的网站 https://www.supralift.com/uk/itemsearch/results 上的广告链接。我的目的是收集页面上的链接,然后点击“Next&q...
使用隐藏的 API 通过 JavaScript 分页器抓取网站
网站 https://www.supralift.com/uk/itemsearch/results 使用基于 JavaScript 的分页器,该分页器不会在 url 中公开任何参数,我可以更改这些参数并以这种方式浏览网站。 寻找
我这里有一个网站,其链接结构如下 https://example.com/assets/contents/1627347928.mp4