1
Vývoj / Re:Jak v bashi/awk/sedu vypsat text uvnitř tagu div /div ?
« kdy: 22. 07. 2023, 21:43:46 »
Ak by bola možnosť, jednoznačne by som použil nejaký výkonnejší programovací jazyk.
Na takéto úlohy existuje celá rada pokročilých scrapovacíh knižníc, napr.
JSoup, AngleSharp, BeautifulSoup, cheerio, colly ...
Príklad v Groovy
Príklad v AngleSharp
Tu by tom zas odporúčal vynikajúci knižnicu Playwright. Vyžaduje však plnohodnotný browser.
Robí sa to z terminálu cez tzv. headless browser.
Na takéto úlohy existuje celá rada pokročilých scrapovacíh knižníc, napr.
JSoup, AngleSharp, BeautifulSoup, cheerio, colly ...
Príklad v Groovy
Kód: [Vybrat]
@Grab('org.jsoup:jsoup:1.10.1')
import org.jsoup.Jsoup
def url = 'https://nrf.com/resources/top-retailers/top-100-retailers/top-100-retailers-2019'
def doc = Jsoup.connect(url).get()
def e = doc.getElementById('stores-list--section-16266')
def table = e.child(0)
println "Top 10"
def trs = table.getElementsByTag('tr').drop(1).take(10)
def vals = []
for (tr in trs) {
def val = []
def res = tr.getElementsByTag('td').take(3).forEach {
val.add(it.text())
}
vals.add(val)
}
for (val in vals) {
println val
}
Príklad v AngleSharp
Kód: [Vybrat]
using AngleSharp;
var config = Configuration.Default.WithDefaultLoader();
using var context = BrowsingContext.New(config);
var url = "https://nrf.com/resources/top-retailers/top-100-retailers/top-100-retailers-2019";
using var doc = await context.OpenAsync(url);
var htable = doc.GetElementById("stores-list--section-16266");
var trs = htable.QuerySelectorAll("tr");
Console.WriteLine("Top ten:");
foreach (var tr in trs.Skip(1).Take(10))
{
var data = tr.QuerySelectorAll("td").Take(4);
var res = (from e in data
select e.TextContent).ToArray();
Console.WriteLine(string.Join(" ", res));
}
Citace
Takže v Javascriptu takhle můžeme použít Jquery, ale kdybych to chtěl udělat z terminálu přes prohlížeč, který je nízkonárokový podobně jako lynx? Existuje podobná utilita?
Tu by tom zas odporúčal vynikajúci knižnicu Playwright. Vyžaduje však plnohodnotný browser.
Robí sa to z terminálu cez tzv. headless browser.
Kód: [Vybrat]
#!/usr/bin/python
from playwright.sync_api import sync_playwright
with sync_playwright() as playwright:
webkit = playwright.webkit
browser = webkit.launch()
page = browser.new_page()
url = 'http://webcode.me/os.html'
page.goto(url)
els = page.locator('ul li').all();
for e in els:
print(e.text_content())
browser.close()