Search on blog:

Scraping: Python tools and modules for scraping (updated)

Last update: 2022.03.28


Get HTML from server

urllib.request

  • standard module, preinstalled with Python
  • some operations need more code than requests
  • it has urlretrive() to download file

Requests


Search data in HTML

BeautifulSoup

  • it uses css or own functions which can use regex
  • it doesn't use xpath

lxml

  • it uses xpath
  • it doesn't use css

Parsel

  • it uses css or xpath with regex
  • it is used by Scrapy

cssselector

  • it converts css to xpath and use lxml to search

pyquery

  • it uses selectors like jquery.
  • it uses pseudo classes which doesn't exist in css ie. :first :last :even :odd :eq :lt :gt :checked :selected :file

Scraping framework(s)

Scrapy

  • it uses xpath and css selectors
  • it can run many processes at the same time
  • it can use proxies
  • it can be used on servers zyte.com
  • extension to work with selenium: scrapy-selenium

https://doc.scrapy.org/en/latest/_images/scrapy_architecture_02.png

Source: https://doc.scrapy.org/en/latest/topics/architecture.html

MechanicalSoup

  • it is Requests + BeautifulSoup

RobotFramework

RoboBrowser

mechanize


Work with JavaScript

If page uses JavaScript then you may need one of this modules which can control real web browser

Selenium

See also selenium.dev

pyppeteer

playwright


Other tools for scraping

Portia

  • docker with tool that allows for visually scraping.
  • created by authors of Scrapy

Other tools for help

httpbin.org

  • it can be used to test HTTP requests
  • it sends back all data which it gets so you check if your requests creates correct data.

ToScrape.com

Web Scraping Sandbox with two fictional pages/portals which you can use it to learn scraping.

There are examples with:

  • normal pagination
  • infinite scrolling pagination
  • JavaScript generated content
  • a table based messed-up layout
  • login with CSRF token (any user/passwd works)
  • ViewState (C# DotNet)

curlconverter.com

  • can convert curl command to code in Python (requests) or other languages
  • some (API) documentation show examples as command curl
  • some conversion may have mistake

Older link curl.trillworks.com

Similar:

  • reqbin.com
  • curl2scrapy (convert for module scrapy)

  • tools Postman and Insomni also can generate code for Python

"DevTools" in Chrome and Firefox

  • tab: Inspecion - to search items in HTML and get CSS or XPath selector. (but it gives selector which doesn't use classes and ids so it can be long and unreadable for human)
  • tab: Network - to see all requests from browser to server and get requests used by JavaScript to get
  • tab: Console - to test JavaScript code or use $("...") to test css selector or $x("...") to test xpath
  • extensions:

Extra doc for Firefox

Tools which can be used to test requests and API

They can also generate code in python using urllib or requests


By The Way

pandas.read_html() can read HTML from file or url and scrape data from all standard <table> and create list with DataFrames


Example codes for different pages and different tools on my GitHub:

Python: Jak zamienić tekst z wartosciami szestastwkoymi (hex) z \ na normalne znaki

Czasami podczas scrapingu można otrzymać tekst z podwójnymi \\ i szesnastkowymi kodami znaków

\\x3Cstyle\\x3E\\x0A.mainDiv\\x0A\\x7B\\x0A\\x20\\x20width\\x3A1000px\\x3B\\x0A}\\x0A\\x3C/style\\x3E

A to powinno wyglądać jako

<style>
   .mainDiv
  {
  width:1000px;
  background-image:url
<style>

Należy to przekonwerterować ponownie do bytes z użyciem raw_unicode_escape a …

Python: How to find element next after (previous before) another element with BeautifulSoup.

BeautifulSoup has many functions to search elements - not only find() and find_all() but also

It can also search in other direction using

It has also attributes (for single element)

and iterators (for many elements)

which can work different …

Python: Jak w BeautifulSoup znaleść element występujący za (lub przed) innym elementem.

BeautifulSoup ma wiele funkcji do szukania elementów - nie tylko find() i find_all() ale także

Może on też szukać w przeciwnym kierunku używając

Ma także atrybuty (dla pogrania pojedyńczego elementu)

i iteratorory (dla pogrania wielu elementów)

które mogą działać …

Jak użyć DevTools w Firefox do szukania danych JSON na EpicGames.com

Film pokazuje Devtools w Firefox, zakłada Network, filtr XHR.

Można dostać się do DevTools używając menu Web Developer lub skrótu klawiszowego F12.

Po kliknięciu w link w DevTools pokazuje także boczne zakładki Headers i Response z danymi JSON.

Używając na linku menu kontektowego (prawy przycisk myszy) można także użyć Open …

Scraping: Jak użyć wyrażenia regularnego w BeautifulSoup aby pobrać Laureatów Nobla z tabeli w Wikipedii

Chciałem użyć wyrażenia regularnego do pobrania linków do laureatów w tabeli na stronie List of Nobel Memorial Prize laureates in Economics

Najpierw próbowałem użyć r'^/wiki/[A-Z][a-z]*_[A-Z][a-z]*$') ponieważ wyglądało, że linki mają postać

/wiki/Paul_Krugman

ale okazało się, że to znajduje także linki postaci

/wiki/United_States …

Scraping: Jak pobrać dane z interaktywnego wykresu stworzonego przez HighCharts

Na stronie https://www.worldometers.info/coronavirus/#countries jest wykres Highcharts z "Total Coronavirus Death". Chciałem pobrać dane, które zostały użyte do wyświetlenia tego wykresu.

Wykres nie używa AJAX do wczytywania danych z innego url więc nie mogłem pobrać je bezpośredion. Wykres nie trzyma ich także w oddzielnej zmiennej w …

Selenium: Jak zamknąć alert stworzony przez JavaScript

JavaScript może tworzyć trzy standarowe wyskakujące alerty: alert(), confirm() lub prompt().

  • wszystkie z nich mają przycisk OK
  • confirm() i prompt() mają przycisk CANCEL
  • prompt() ma pole tekstowe

Aby wcisnąć OK

driver.switch_to.alert.accept()   # press 'OK'

Aby wcisnąć CANCEL (tylko w confirm() i prompt())

driver.switch_to.alert.dismiss()   # press 'Cancel …

« Page: 1 / 12 »