Security Professionals - ipfw add deny all from eindgebruikers to any

Finding Children Nodes met behulp van BSoup

17-09-2020, 23:54 door planetenpiet, 4 reacties
De taak van web scraping is begrijpen hoe de structuur van het web werkt. Welke tools zijn er nog meer voorhanden dan Beautiful Soup? Hieronder een fragment van hoe het werkt, maar iemand een idee welke tools voorhanden zijn die beter zijn in de opsporing van content? (in dit geval is het webscraping voor een security project)



pip install BeautifulSoup4

from bs4 import BeautifulSoup as bso
our_soup = bso(sample_content, "lxml")


findChild():

The findChild method is used to find the first child node of HTML elements. For example when we take a look at our “ol” or “ul” tags, we would find two children tags in it. However when we use the findChild method, it only returns the first node as the child node.


Voorbeeld van pagina:

first_child = our_soup.find("body").find("ol")
print(first_child.findChild())



<li>Number One</li>

En dan kun je verder:


'Number One'
findChildren():

Via first_child = our_soup.find("body").find("ol"); print(first_child.findChildren())

In principe tot dat je je alles bij elkaar hebt. Vraag is nu, welke tools zijn beter in het organiseren van data voor eenzelfde doeleind?


Bron: https://linuxhint.com/find_children_nodes_beautiful_soup/
Reacties (4)
18-09-2020, 10:31 door Anoniem
Volgens mij zou je dit bijvoorbeeld ook direct kunnen doen met LXML. En dan kan je
direct xpath gebruiken ipv "find". Dat maakt het zoeken van child-nodes etc een stuk
overzichtelijk, hier wordt het eea goed uitgezet:

https://docs.python-guide.org/scenarios/scrape/
18-09-2020, 17:02 door Anoniem
Sla html.parser uit de standaard library van Python niet over. Die is heel basaal maar mogelijk geschikt voor wat je doet.

Je maakt een subclass aan van html.parser.HTMLParser, en definieert methods voor het afhandelen van start- en eindtags (waarbij een xml-stijl <tag/> als start+eindtag wordt afgehandeld, tenzij je een override van nog een method doet) en voor data. Omdat de HTML sequentieel wordt afgehandeld: starttag->childtags->endtag, is de structuur uit de aanroepvolgorde te halen. Je kan bijvoorbeeld een lijst bijhouden en in elke aanroep van handle_starttag() daar een element aan toevoegen, en het bij de aanroep van handle_endtag() het weer uit de lijst verwijderen. Zo'n element kan naast de naam van de tag en attributen (die worden in de aanroep doorgegeven) een lijst met rechtstreekse children bevatten, die je in handle_starttag() toevoegt aan het element dat de parent vertegenwoordigt, om het eindresultaat in handle_endtag() te verwerken. Of wat je maar nodig hebt.

Het kan een nadeel zijn dat je low-level alles zelf moet opbouwen, terwijl bijvoorbeeld BeautifulSoup dat allemaal voor je doet, maar het kan ook een voordeel zijn omdat je maatwerk opbouwt voor wat jouw toepassing nodig heeft, zeker als dat niet een volledige weergave van de HTML moet zijn maar slechts een uittreksel eruit. Dan kan een volledige weergave van de HTML veel ruis bevatten, en sluiten de objecten voor HTML-elementen zoals BeautifulSoup die produceert wellicht helemaal niet aan bij wat jij nodig hebt. Het hangt dus helemaal af van wat je toepassing eigenlijk precies moet doen. En wat ik in de vorige alinea beschreef is niet moeilijk, probeer het gewoon eens om er gevoel voor te krijgen.

Er bestaat een heel algemene neiging om te denken dat rijke, alomvattende libraries en tools meer te bieden hebben dan heel basale, waarvan maar al te vaak gedacht wordt dat die moeilijk zijn, want low-level. Ik heb vaker dan me lief is ondervonden dat die rijke, alomvattende tools helemaal niet zo geschikt bleken te zijn voor het doel waarvoor ze werden ingezet en juist een blok aan het been gingen vormen omdat je als ontwikkelaar voortdurend om aannames heen zat te werken die zo'n tool deed maar die voor jouw toepassing niet opgingen. Dan kunnen juist de basale tegenhangers veel flexibeler en praktischer blijken te zijn. Dat geldt zeker niet voor alle geavanceerde libraries en voor alle toepassingen, dus kan ik onmogelijk weten hoe dat voor jouw toepassing uitpakt, daar zal je zelf achter moeten komen.

Sluit het niet bij voorbaat uit, wil ik maar zeggen, het zou kunnen blijken dat je juist met een basale tool als html.parser op een verrassend eenvoudige manier precies de gegevens kan verzamelen die je nodig hebt in een vorm waar je wat mee kan.
18-09-2020, 21:14 door Anoniem
Wat betere voorbeelden graag?

P. S. Wat is plausible deniability? Learn to code.
19-09-2020, 20:00 door Anoniem
Hi, eindopdrachtje? Je kan werken met beautiful soup (static html), selenium(traag maar complete browser simulatie (kan met extra tools ook javascript rendered pages scrapen), ook kan je naar andere opties kijken buiten <href> scraping om. Denk bvb aan xml scraping em aprsing van robots.txt etc etc. Ik heb een tool gemaakt "weebpage.py" die dit wel een beetje "ok" doet: https://www.google.com/url?q=https://github.com/Slowpoke079/weebpage&sa=U&ved=2ahUKEwichLqK5vXrAhVGNOwKHVQLDkIQFjABegQICRAB&usg=AOvVaw25vtegLRv0nyQGZHZvQms6 De tool is vrij simpel geschreven en 100% python3
Reageren

Deze posting is gelocked. Reageren is niet meer mogelijk.